我正在解決一個查找和聚合陣列子集的問題。經過幾次嘗試,我能夠使用以下方法一個接一個地列印所有子集:
def print_subsets(arr, curr, idx):
if idx == len(arr):
print(curr)
return
print_subsets(arr, curr, idx 1)
print_subsets(arr, curr [arr[idx - 1]], idx 1)
例如,如果我們有函式呼叫;print_subsets([1,2], [], 0)我們得到輸出
[],[1],[2],[1,2]。
下一步,是否可以使用修改后的遞回方法并將輸出作為包含該陣列所有子集的串列回傳?
預期輸出:[[],[1],[2],[1,2]]。
uj5u.com熱心網友回復:
假設您的代碼正確列印了您幾乎在那里所需的子串列。您只需要回傳子串列而不是列印它們:
def print_subsets(arr, curr, idx):
if idx == len(arr):
return [curr]
return print_subsets(...) print_subsets(...)
(我放 [] 是curr因為你想回傳一個子串列串列,而不僅僅是子串列)。
因此,只要識別出一個子集(遞回基本情況)而不是列印它,函式就會回傳它。否則它只是聚合并回傳遞回呼叫回傳的子集。
通過該更改,我會將函式重命名為getSubsets(). 我還建議為初始呼叫提供默認值curr并idx簡化初始呼叫:
def getSubsets(arr, curr=[], idx=0):
...
然后您可以將其稱為:
subsets = getSubsets(arr)
uj5u.com熱心網友回復:
你知道你可以使用 python 內置itertools代替:
import itertools as it
arr = [1,2]
subsets = [list(i) for c in range(len(arr) 1) for i in it.combinations(arr,c)]
輸出:
>> [[], [1], [2], [1, 2]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/434914.html
