给出一个数字列表,例如x = [1,2,3,4,5]
我需要计算它的powerset(该列表的所有子集的集合)。现在,我使用以下代码来计算powerset,但是当我有大量这样的列表(例如40K这样的数组)时,它非常慢。所以我想知道是否有任何方法可以加快速度。
superset = [sorted(x[:i]+x[i+s:]) for i in range(len(x)) for s in range(len(x))]
我也尝试了以下代码,但它比上面的代码要慢得多。
from itertools import chain, combinations
def powerset(x):
xx = list(x)
return chain.from_iterable(combinations(xx, i) for i in range(len(xx)+1))
答案 0 :(得分:1)
通过让所有子集将原始集引用为列表并使每个子集包含其位表示包含在集合中的数字,可以更有效地表示powerset。因此,您可以通过计算元素的数量来枚举幂集,然后使用那么多位迭代整数。但是,正如评论中所指出的那样,功率集的增长速度非常快,因此如果您可以避免计算或迭代功率集,则应尽可能这样做。