python - 循环卡在第三个索引上
问题描述
再会。我需要创建一个函数来返回列表中两个最低正整数的总和。
它没有成功,所以我让它打印了每一步,然后我看到它由于某种原因卡在了第三个索引上。它说“列表索引超出范围”,但我不太明白为什么列表中有 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]))
解决方案
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 循环来做到这一点。
推荐阅读
- javascript - Angular 7嵌套使用父值作为子索引
- angular - 单选按钮组之间的选项卡以角度形式中断
- perl - 两个 Perl 程序之间的 IPC
- c++ - 如何线性插值到不恒定的目的地
- amazon-web-services - 我如何在 aws cloudwatch 中安排警报
- sql - SQL - 分组中两个值的总和
- bash - 如何在awk中打印系统命令的结果
- python - 测试在 Django 中返回的多个对象(模拟?)
- javascript - Javascript 不适用于单击汉堡包以打开和关闭汉堡包
- javascript - 如何通过javascript或jquery在表单中设置多个默认按钮?