首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的列表检查小算法问题

python中的列表检查小算法问题
EN

Stack Overflow用户
提问于 2022-02-22 14:00:15
回答 2查看 30关注 0票数 -2

我想做一个小程序,得到满足'x+y = sum‘的列表中的所有夫妇(x,y)

代码语言:javascript
复制
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超出范围”

这是代码,请帮我

EN

回答 2

Stack Overflow用户

发布于 2022-02-22 14:05:17

您可以使用迭代变量代替。

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2022-02-22 14:26:40

代码更多,但可能更有效率。这是因为如果列表中的任何元素大于或等于目标值,那么在计算中包含它或更高的元素是没有意义的。所以:

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
{(4, 5), (1, 8), (2, 7), (3, 6)}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71222642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档