返回项的 PowerSet 的递归 Python 函数
Recursive Python function returning PowerSet of items
我正在尝试调试程序,但 运行 遇到了问题。有人可以指导我解决这里的问题吗?
该程序旨在获取项目列表,以及 returns 这些项目的动力集列表。
一个例子:
>>> 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
the recipes section of the itertools documentation 中有一个 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))
有更好的食谱,是的。但我认为您的代码存在问题,您应该将 return []
替换为 return [[]]
。空集本身就是一个子集。
我在网上找到了这个解决方案:
def powset3(seq):
if seq:
p = powset3(seq[1:])
return p + [x + seq[:1] for x in p]
else:
return [[]]
我正在尝试调试程序,但 运行 遇到了问题。有人可以指导我解决这里的问题吗?
该程序旨在获取项目列表,以及 returns 这些项目的动力集列表。
一个例子:
>>> 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
the recipes section of the itertools documentation 中有一个 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))
有更好的食谱,是的。但我认为您的代码存在问题,您应该将 return []
替换为 return [[]]
。空集本身就是一个子集。
我在网上找到了这个解决方案:
def powset3(seq):
if seq:
p = powset3(seq[1:])
return p + [x + seq[:1] for x in p]
else:
return [[]]