Python for循环返回IndexError:列表索引超出范围

时间:2016-03-29 16:47:20

标签: python list for-loop

我刚刚开始学习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)

3 个答案:

答案 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:

当:

  • i == 0,digits [i] == 1,&amp; digits [digits [i]] == 2
  • i == 1,digits [i] == 2,&amp; digits [digits [i]] == 3
  • i == 8,digits [i] == 9,&amp; digits [digits [i]] == 10
  • i == 9,digits [i] == 10,&amp; digits [digits [i]]引发IndexError

当您在列表的开头添加0时,所有索引的标识i == digits[i]都成立,并且您的代码不会崩溃,但它仍在进行双索引,不是你想要的。

答案 2 :(得分:2)

您的代码中有几个问题:

  • 您正在假设e是一个索引。它不是,digits列表中的实际值。您的列表的索引从0到9,因此当e == 10(最后一个元素)时,您将获得IndexError;没有digits[10]

  • 您将templow设置为0digits中的所有值都不低于0,因此您永远不会找到e < temp为真的任何内容。您需要选择非常高的值。 float('inf')是人为的最高级别的&#39;值(无穷大),对于此类测试非常有效; 任何整数值低于无穷大。

  • 您不需要templow变量。你只需要一个或另一个来测试后来的值是否更低。

然后,工作代码如下所示:

low = float('inf')
for e in digits:
    if e < low:
        low = e