检查列表元素是否是从列表中添加其他元素的结果



给定如下整数列表:

[10, 5, 7, 3, 2, 1, 50]

我想知道哪些元素(如果有的话(是从列表中添加另外两个(或多个(元素的结果。在这种情况下,输出将类似于:

10 -> [5, 3, 2]
10 -> [7, 3]
10 -> [7, 2, 1]
5  -> [3, 2]
7  -> [5, 2]
3  -> [2, 1]

有没有一种有效的方法来获得这种输出?请注意,输入列表可能非常大。

获取最小到最大列表的所有可能组合,然后将每个列表的总和与lst中的每个元素进行比较,看看它们是否相同,然后打印出来。

import itertools
lst = [10, 5, 7, 3, 2, 1, 50]
combs = []
for i in range(1, len(lst)+1):
[combs.append(list(x)) for x in itertools.combinations(lst, i) if len(list(x)) > 1]
for i in lst:
for c in combs:
if sum(c) == i:
print(i,c)

请注意,

if len(list(x)) > 1

去掉只包含一个数字的列表。

输出

10 [7, 3]
10 [5, 3, 2]
10 [7, 2, 1]
5 [3, 2]
7 [5, 2]
3 [2, 1]

相关内容

最新更新