[英]Recursive Python function returning PowerSet of items
我正在嘗試調試程序並遇到問題。 任何人都可以指導我解決這里的問題嗎?
該程序旨在獲取項目列表,並返回這些項目的 powerset 列表。
一個例子:
>>> getAllSubsets([1,2])
[[1,2],[1],[2],[]]
編碼:
def getAllSubsets(lst):
if not lst:
return []
withFirst = [ [lst[0]] + rest for rest in getAllSubsets(lst[1:]) ]
withoutFirst = getAllSubsets(lst[1:])
return withFirst + withoutFirst
有更好的食譜,是的。 但我認為你的代碼的問題是你應該用return [[]]
替換return []
return [[]]
。 空集本身就是一個子集。
itertools 文檔的 recipes 部分有一個powerset
生成器; 你應該使用它。
def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable)
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
我在互聯網上找到了這個解決方案:
def powset3(seq):
if seq:
p = powset3(seq[1:])
return p + [x + seq[:1] for x in p]
else:
return [[]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.