首页 > 解决方案 > 检查列表元素是否是从列表中添加其他元素的结果

问题描述

给定一个这样的整数列表:

[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]

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

标签: python-3.xlist

解决方案


获取从最小到最大列表的所有可能组合,然后将每个列表的总和与每个元素进行比较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]

推荐阅读