python - 检查数字不是列表中 2 个整数的总和

标签 python nested-loops continue

给定一个整数列表,我想检查第二个列表,并从第一个列表中仅删除那些不能由第二个列表中的两个数字之和构成的列表。所以给定 a = [3,19,20]b = [1,2,17],我想要 [3,19].

看起来像是有两个嵌套循环的小菜一碟 - 除了我被 breakcontinue 命令卡住了。

这是我所拥有的:

def myFunction(list_a, list_b):
    for i in list_a:
        for a in list_b:
            for b in list_b:
                    if a + b == i:
                        break
                    else:
                        continue
                    break
                else:
                    continue
            list_a.remove(i)
    return list_a

我知道我需要做什么,只是语法似乎不必要地令人困惑。有人可以告诉我更简单的方法吗? TIA!

最佳答案

你可以这样做,

In [13]: from itertools import combinations
In [15]: [item for item in a if item in [sum(i) for i in combinations(b,2)]]
Out[15]: [3, 19]

combinations 将在b 中给出所有可能的组合,并得到总和列表。只需检查 a

中是否存在该值

编辑

如果你不想使用 itertools 为它写一个函数。像这样,

def comb(s):
    for i, v1 in enumerate(s):
        for j in range(i+1, len(s)):
            yield [v1, s[j]]

result = [item for item in a if item in [sum(i) for i in comb(b)]]

关于python - 检查数字不是列表中 2 个整数的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48367308/

相关文章:

javascript - 为什么 "continue"语句在 JavaScript 中是错误的?

Java 在 if 结束时继续

python - 将 Linux Terminal 放入 wxPython 窗口

c - 查找数组中最小元素索引的时间复杂度分析——最差、平均和最佳情况

python - 试图理解为什么只在第一次调用嵌套 for 循环

java - 重写嵌套 for 循环以提供更好的格式化输出

python - GridseachCV - 值错误 : Found input variables with inconsistent numbers of samples: [33 1]

python - Airflow 回填和新的 dag 运行

Python:如何通过排除第三个目录来使用 tarfile 模块获取 tar

python - python 中的异常处理和继续 for 循环