给定一个数字列表,例如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))
最佳答案
您可以通过让所有子集将原始集作为列表引用并让每个子集包含一个数字(其位指示包含在该集中)来更有效地表示幂集。因此,您可以通过计算元素数量然后迭代具有那么多位的整数来枚举幂集。然而,正如评论中所指出的,幂集增长得非常快,因此,如果您可以避免计算或迭代幂集,那么如果可能的话,您应该这样做。
关于python - 在Python中计算数组幂集最快的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24502705/