如何找到一个特定的超集?

时间:2017-09-21 21:06:28

标签: python

使用Python,我试图创建列表lambdas = [20, 32, 18]的特殊超集,使得该集合应如下所示:

lambdasubs = [20, 32, 18, 20+32, 20+18, 32+18, 20+32+18] which is same as
lambdasubs = [20, 32, 18, 52, 38, 50, 70] 

我知道我总是可以开始:

lambdasubs = lambdas

对于前3个元素,然后是?

1 个答案:

答案 0 :(得分:1)

您可以使用itertools.combinations制作原始列表中的所有12 ... N长度组合

>>> import itertools
>>> [list(itertools.combinations(lambdas, i)) for i in range(1, len(lambdas)+1)]
[[(20,), (32,), (18,)], [(20, 32), (20, 18), (32, 18)], [(20, 32, 18)]]

然后您可以sum每个内部tuple添加具有多个元素的任何组合并展平该列表

>>> list(itertools.chain.from_iterable((sum(j) for j in itertools.combinations(lambdas, i)) for i in range(1, len(lambdas)+1)))
[20, 32, 18, 52, 38, 50, 70]

为了更清楚地了解发生了什么,这大致等同于以下更多程序代码

import itertools
lambdas = [20, 32, 18]
values = []
for size in range(1, len(lambdas)+1):
    for comb in itertools.combinations(lambdas, size):
        values.append(sum(comb))

>>> print(values)
[20, 32, 18, 52, 38, 50, 70]