首页 > 解决方案 > 循环卡在第三个索引上

问题描述

再会。我需要创建一个函数来返回列表中两个最低正整数的总和。

它没有成功,所以我让它打印了每一步,然后我看到它由于某种原因卡在了第三个索引上。它说“列表索引超出范围”,但我不太明白为什么列表中有 5 个位置。我自己想不通。

def sum_two_smallest_numbers(numbers):
    a = 2147483647
    numers = numbers
    b = a
    for i in range(0, len(numbers)):
        print(numbers[i])
        if numbers[i] < a and numbers[i] > 0:
            a = numbers[i]
            numbers.pop(i)
    for j in range(0, len(numers)):
        if numers[j] < b and numers[j] > 0:
            b = numers[j]
            numers.pop(j)
    return a + b

print(sum_two_smallest_numbers([19, 5, 42, 2, 77]))

标签: pythonfunctionloopsfor-loop

解决方案


pop从列表中删除一个值,因此每次您使用pop列表的长度都会变短,现在您会继续使用此算法从列表中删除数字。

def sum_two_smallest_numbers(numbers):
    a = 2147483647
    numers = numbers
    b = a
    ind = -1
    for i in range(0, len(numbers)):
#        print(numbers[i])
        if numbers[i] < a and numbers[i] > 0:
            a = numbers[i]
            ind = i
    numbers.pop(ind)
    for j in range(0, len(numbers)-1):
        if numers[j] < b and numers[j] > 0:
            b = numers[j]
    return a + b


print(sum_two_smallest_numbers([19, 5, 42, 2, 77]))

请注意,此算法假定您的列表中至少有 2 个正数。此外,还有更有效的方法可以只用一个 for 循环来做到这一点。


推荐阅读