Re: [問題] 列出一個列表中所有子集合

看板Python作者 (可愛的小松鼠)時間2年前 (2022/12/02 19:54), 編輯推噓0(000)
留言0則, 0人參與, 2年前最新討論串2/5 (看更多)
針對每個號碼 只有兩種可能 拿 或 不拿 從這個思考邏輯,透過遞迴去實現 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,
原始code是把list從頭到尾切兩邊再append,並不是組合
11/26 16:55

11/26 16:56,
可以查一下itertools.combinations
11/26 16:56

11/26 18:00,
leetcode 78. Subsets 就是你要的
11/26 18:00

12/02 07:36,
想一下樹狀圖:第一層是“1”要放或不放,第二層是”2”
12/02 07:36

12/02 07:36,
要放或不放,...
12/02 07:36

12/02 07:38,
或是想成2進位的000到111,000對應[ ],111對應[1,2,
12/02 07:38

12/02 07:38,
3]
12/02 07:38
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.167.185 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1669982051.A.E45.html
文章代碼(AID): #1ZYUTZv5 (Python)
文章代碼(AID): #1ZYUTZv5 (Python)