如何找到给定集合的特殊超集?

2024-06-10 01:45:29 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python,我试图创建一个特殊的list 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个元素,然后呢?你知道吗


Tags: 元素whichisaslistsamelambdaslambdasubs
1条回答
网友
1楼 · 发布于 2024-06-10 01:45:29

您可以使用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]

相关问题 更多 >