繁体   English   中英

用Python计算数组的幂集最快的方法是什么?

[英]What is the fastest way of computing powerset of an array in Python?

给定一个数字列表,例如x = [1,2,3,4,5]我需要计算其幂集(该列表的所有子集的集合)。 现在,我正在使用以下代码来计算功率集,但是当我有大量此类列表时(例如此类数组的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))

通过让所有子集将原始集合作为列表引用,并使每个子集包含一个数字,这些数字的位指示其包含在集合中,可以更有效地表示功率集。 因此,您可以通过计算元素的数量,然后迭代具有这么多位数的整数来枚举功率集。 但是,正如注释中所指出的那样,功率集的增长非常快,因此,如果您可以避免必须对功率集进行计算或迭代,则应尽可能这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM