递归Python函数,返回项目的PowerSet。

问题描述 投票:1回答:3

我正试图调试一个程序,但遇到了问题。谁能告诉我问题出在哪里?

程序的目的是接收一个项目列表,并返回这些项目的权力集列表。

举个例子。

>>> 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
python recursion nested-lists
3个回答
3
投票

有更好的配方,是的。但我认为你的代码的问题在于你应该把下面的代码替换成 return []return [[]]. 空集本身就是一个子集。


1
投票

有一个 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))

-1
投票

我在网上找到了这个解决办法。

def powset3(seq):
    if seq:
        p = powset3(seq[1:])
        return p + [x + seq[:1] for x in p]
    else:
        return [[]]
© www.soinside.com 2019 - 2024. All rights reserved.