给定一个整数列表,我想检查第二个列表,并从第一个列表中仅删除那些不能由第二个列表中的两个数字之和构成的列表。所以给定 a = [3,19,20]
和 b = [1,2,17]
,我想要 [3,19]
.
看起来像是有两个嵌套循环的小菜一碟 - 除了我被 break
和 continue
命令卡住了。
这是我所拥有的:
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/