Re: [問題] 列出一個列表中所有子集合
針對每個號碼
只有兩種可能
拿 或 不拿
從這個思考邏輯,透過遞迴去實現
https://onlinegdb.com/Tcl3snoKh
def subsets( nums ) :
all_subset = []
bag = []
# ----------------------------------------
# i : 索引值, 從 0 ~ n-1
def picker( i ):
## 終止條件
# 當所有號碼都已經考慮過了
if i == len(nums):
all_subset.append( bag[::] )
return
## 遞迴關係式:
# 對當下這個號碼,有兩種可能情況,拿這個號碼,或者不拿這個號碼。
# 可能情況a: 拿當下這個號碼
bag.append( nums[i] )
picker( i+1 )
bag.pop()
# 可能情況b: 不拿當下這個號碼
picker( i+1 )
return
# -----------------------------------------
# 從第一個號碼開始
picker( 0 )
return all_subset
# 範例:假定輸入是[1, 2, 3]
numbers = [1,2,3]
result = subsets( numbers )
# 範例輸出: [[1, 2, 3], [1, 2], [1, 3], [1], [2, 3], [2], [3], []]
print( result )
======================================================================
※ 引述《rebe212296 (綠豆冰)》之銘言:
請問list的子集合如何求出,我想做的是投入一列表可以return其子集的函式
nums=[1,2,3]
#這是想要的結果 [[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]
#想法:每抽出1,2,3,幾個元素,便存成一個list
def NS(list):
S=[]
j=len(list)
for i in list:
S.append([i])
while(j>=0):
S.append(list[:j])
S.append(list[j:])
j-=1
return S
print(NS(nums))
#這個結果是
[[1], [2], [3], [1, 2, 3], [], [1, 2], [3], [1], [2, 3], [], [1, 2, 3]]
可是我求不出[1, 3],先謝謝版大的回答。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.37.1 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1669450199.A.FDA.html
→
11/26 16:55,
11/26 16:55
→
11/26 16:56,
11/26 16:56
→
11/26 18:00,
11/26 18:00
→
12/02 07:36,
12/02 07:36
→
12/02 07:36,
12/02 07:36
→
12/02 07:38,
12/02 07:38
→
12/02 07:38,
12/02 07:38
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.167.185 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1669982051.A.E45.html
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章