我正试图调试一个程序,但遇到了问题。谁能告诉我问题出在哪里?
程序的目的是接收一个项目列表,并返回这些项目的权力集列表。
举个例子。
>>> 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 [[]]
. 空集本身就是一个子集。
有一个 powerset
发电机在 食谱部分 的 itertools文档;你应该用这个。
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 [[]]