遍历要更新的列表

问题描述 投票:0回答:1

我正在处理两列。一个有几个单独的数字,另一个有和。我想匹配list1和list2。在每次迭代中,我都会删除匹配的数字。不一定所有数字都匹配,但我想获得尽可能多的数字。如何确保循环继续进行迭代,但在完成所有匹配后终止?

理想地,在下面的示例中,我希望得到类似以下内容的结果:

[5,6],11 \ n[2,3],5

当然,如果整个方法不正确,请随时提出建议。

谢谢您的帮助。

import itertools

list1=[5,6,2,3,8,7]
list2=[11,5]

combos=list(itertools.combinations(list1, 2))

for i in range(len(list1)):
    if sum(combos[i]) in list2:
        list1.remove(combos[i][0])
        list1.remove(combos[i][1])
        list2.remove(sum(combos[i]))
        combos=list(itertools.combinations(list1, 2))
        print(combos[i])

python list itertools
1个回答
0
投票

这只会带来一场比赛,但这并不是最好的一场比赛:

import itertools

list1=[5,6,2,3,8,7]
list2=[11,5]

combos=list(itertools.combinations(list1, 2))
result=[]
for i in range(len(combos)):
    if sum(combos[i]) in list2 and (combos[i][0] in list1 and combos[i][0] in list1 ):
        result.append(combos[i])
        list1.remove(combos[i][0])
        list1.remove(combos[i][1])
        list2.remove(sum(combos[i]))

print(result)

#Output: [(5, 6), (2, 3)]

对于下面的输入,它只会找到一些匹配项,而不是最多的匹配项:

list1=[5,6,2,8,3,7]
list2=[11,5,10,15]
# Output: [(5, 6), (2, 8)]

list1=[5,6,2,3,8,7]
list2=[11,5,10,15]
# Output: [(5, 6), (2, 3), (8, 7)]
© www.soinside.com 2019 - 2024. All rights reserved.