使用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个元素,然后是?
答案 0 :(得分:1)
您可以使用itertools.combinations
制作原始列表中的所有1
,2
... 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]