我刚刚开始学习python。我试图找到数字列表中的最小整数。相反,我得到了这个错误:
Traceback (most recent call last):
File "H:/Python/untitled/08_python.py", line 32, in <module>
if digits[e] < temp:
IndexError: list index out of range
我意识到你可以使用min(数字),但我认为到目前为止我会挑战我的知识。我很可能犯了一个简单的错误,并没有正确诊断它。如果我在列表中抛出0,一切正常。
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
low = 0
temp = 0
for e in digits:
if digits[e] < temp:
low = digits[e]
temp = digits[e]
print(low)
答案 0 :(得分:5)
for e in digits
直接迭代列表的内容。此时您不需要使用digits[e]
,因为e
已经是值,而不是索引。这也是它失败的原因,因为digits[10]
已超过列表的末尾。
其他小注意事项 - 您的代码仅适用于正数,因为您从low = 0
开始;如果列表只有否定,那么您仍会获得0
作为结果
通过在开头将其设置为None
并检查它的一种方法来避免这种情况:
low = None
for e in digits:
if low is None or low < e:
low = e
print(low)
答案 1 :(得分:2)
for e in digits
大致翻译为:
for i in range(0, len(digits)):
e = digits[i]
所以你的代码变成了:
for i in range(0, len(digits)):
if digits[digits[i]] < temp:
当:
IndexError
当您在列表的开头添加0
时,所有索引的标识i == digits[i]
都成立,并且您的代码不会崩溃,但它仍在进行双索引,不是你想要的。
答案 2 :(得分:2)
您的代码中有几个问题:
您正在假设e
是一个索引。它不是,digits
列表中的实际值。您的列表的索引从0到9,因此当e == 10
(最后一个元素)时,您将获得IndexError
;没有digits[10]
。
您将temp
和low
设置为0
。 digits
中的所有值都不低于0
,因此您永远不会找到e < temp
为真的任何内容。您需要选择非常高的值。 float('inf')
是人为的最高级别的&#39;值(无穷大),对于此类测试非常有效; 任何整数值低于无穷大。
您不需要temp
和low
变量。你只需要一个或另一个来测试后来的值是否更低。
然后,工作代码如下所示:
low = float('inf')
for e in digits:
if e < low:
low = e