python-3.x - 检查列表元素是否是从列表中添加其他元素的结果
问题描述
给定一个这样的整数列表:
[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]
推荐阅读
- python - 即使在线程完成后,QThread 也会在 threading.enumerate() 中列出
- javascript - 如何使用 puppeteer BDD 中的键读取 Json 文件
- arrays - 如何小写整个字符串数组?
- javascript - 在 PHP 中使用 $_GET 获取 HTML 文本输入的值的问题
- python - 如何删除以前的 array() 函数?
- java - 二维整数数组,用于为每个维度按升序返回唯一集合
- reactjs - 使用 fetch 方法做出反应和承诺问题
- reactjs - 单击注册按钮时打开一个新组件
- reactjs - 图片上传预览:window.URL.createObjectURL() 只工作一次
- java - 空单元格检查规则引擎决策表