我想做一个小程序,得到满足'x+y = sum‘的列表中的所有夫妇(x,y)
ar= [1,2,3,4,5,3,6,7,9,8,10,13,18]
sum = 9
for i in ar:
noclubs = [x for x in ar if x != ar[i]]
for z in noclubs:
if ar[i] + noclubs[z] == sum:
print(ar[i],noclubs[z])它向我显示了这个错误“如果ari + noclubsz == sum: IndexError: list index超出范围”
这是代码,请帮我
发布于 2022-02-22 14:05:17
您可以使用迭代变量代替。
ar= [1,2,3,4,5,3,6,7,9,8,10,13,18]
sum = 9
for i in ar:
noclubs = [x for x in ar if x != i]
for z in noclubs:
if i + z == sum:
print(i,z)发布于 2022-02-22 14:26:40
代码更多,但可能更有效率。这是因为如果列表中的任何元素大于或等于目标值,那么在计算中包含它或更高的元素是没有意义的。所以:
from itertools import combinations
ar = [1,1,2,3,4,5,3,6,7,9,8,10,13,18]
total = 9
def get_pairs(a, s):
result = set()
for combo in combinations([e for e in a if e < s], 2):
if sum(combo) == s:
result.add(combo)
return result
print(get_pairs(ar, total))输出:
{(4, 5), (1, 8), (2, 7), (3, 6)}https://stackoverflow.com/questions/71222642
复制相似问题