列表索引超出范围--Python错误 [已解决]

662 阅读4分钟

在这篇文章中,我们将讨论 Python 中的IndexError: list index out of range 错误。

在文章的每一节,我都会强调错误的可能原因以及如何修复它。

你可能因为以下原因得到IndexError: list index out of range 错误:

  • 试图访问一个不存在于列表中的索引。
  • 在你的循环中使用无效的索引。
  • 在使用range() 函数时,指定了一个超过列表中索引的范围。

在我们继续修复这个错误之前,让我们讨论一下 Python 列表中的索引是如何工作的。如果你已经知道索引的工作原理,你可以跳过下一节。

索引在 Python 列表中是如何工作的?

Python 列表中的每个项目都可以用它的索引号来评估。列表中的第一个项目的索引是零。

考虑一下下面的列表:

languages = ['Python', 'JavaScript', 'Java']

print(languages[1])
# JavaScript

在上面的例子中,我们有一个叫做languages 的列表。这个列表有三个项目 - 'Python', 'JavaScript', 和 'Java'。

要访问第二个项目,我们使用它的索引。languages[1].这样就打印出了JavaScript

一些初学者可能会误解这一点。他们可能会认为,既然索引是1,就应该是第一个项目。

为了更容易理解,这里根据索引对列表中的项目进行了分类:

Python (项目1) => 索引0
JavaScript (项目2) => 索引1
Java (项目3) => 索引2

正如你在上面看到的,第一个项目的索引是 0 (因为 Python 是 "零索引")。要访问一个列表中的项目,你要利用它们的索引。

如果你试图使用 Python 列表中超出范围的索引,会发生什么?

如果你试图用一个超出范围的索引来访问列表中的一个项目,你会得到IndexError: list index out of range 错误。

这里有一个例子:

languages = ['Python', 'JavaScript', 'Java']

print(languages[3])
# IndexError: list index out of range

在上面的例子中,我们试图使用一个第四项的索引来访问它。languages[3].我们得到了IndexError: list index out of range 的错误,因为这个列表没有第四个项目 - 它只有三个项目。

简单的解决方法是,当试图访问列表中的项目时,总是使用一个存在于列表中的索引。

如何修复 Python 循环中的IndexError: list index out of range 错误

循环的工作是有条件的。因此,在满足某个条件之前,它们会一直运行。

在下面的例子中,我们将尝试用一个while 循环来打印一个列表中的所有项目:

languages = ['Python', 'JavaScript', 'Java']

i = 0

while i <= len(languages):
    print(languages[i])
    i += 1

# IndexError: list index out of range

上面的代码返回IndexError: list index out of range 错误。让我们分解一下代码,了解为什么会发生这种情况。

首先,我们初始化了一个变量i ,给它一个0的值:i = 0

然后我们给了一个while 循环的条件(这就是导致错误的原因)。 while i <= len(languages).

从给出的条件来看,我们是说,"只要i 小于等于 language 列表的长度 ,这个循环就应该一直运行"。

len() 函数返回列表的长度。在我们的例子中,3将被返回。所以条件将是这样的:while i <= 3 。当i 等于3时,循环将停止。

让我们假装自己是 Python 编译器。下面是循环运行时发生的情况。

这里是列表。languages = ['Python', 'JavaScript', 'Java'].它有三个索引--0、1和2。

i 是 0 => Python

i 是1时 => JavaScript

i 是 2 => Java

i 为3时 => 列表中没有找到索引。IndexError: list index out of range 抛出错误。

因此,当i 等于3时,错误被抛出,因为列表中没有索引为3的项目。

为了解决这个问题,我们可以修改循环的条件,删除等号。这将使循环在到达最后一个索引时停止。

方法是这样的:

languages = ['Python', 'JavaScript', 'Java']

i = 0

while i < len(languages):
    print(languages[i])
    i += 1
    
    # Python
    # JavaScript
    # Java

现在的条件是这样的:while i < 3

循环将在2处停止,因为条件不允许它等同于len() 函数所返回的值。

如何修复Python中使用range() 函数时出现的IndexError: list index out of range 错误?

默认情况下,range() 函数返回一个从零开始的指定数字的 "范围"。

下面是一个使用range() 函数的例子:

for num in range(5):
  print(num)
    # 0
    # 1
    # 2
    # 3
    # 4

正如你在上面的例子中所看到的,range(5) 返回0、1、2、3、4。

你可以使用range() 函数和一个循环来打印一个列表中的项目。

第一个例子将展示一个抛出IndexError: list index out of range 错误的代码块。在指出错误发生的原因后,我们将修复它:

languages = ['Python', 'JavaScript', 'Java']


for language in range(4):
  print(languages[language])
    # Python
    # JavaScript
    # Java
    # Traceback (most recent call last):
    #   File "<string>", line 5, in <module>
    # IndexError: list index out of range

上面的例子打印了列表中的所有项目,以及IndexError: list index out of range 错误。

我们得到这个错误是因为range(4) 返回 0, 1, 2, 3。我们的列表中没有值为3的索引。

为了解决这个问题,你可以修改range() 函数中的参数。一个更好的解决方案是使用列表的长度作为range() 函数的参数。

就是说:

languages = ['Python', 'JavaScript', 'Java']


for language in range(len(languages)):
  print(languages[language])
    # Python
    # JavaScript
    # Java

上面的代码运行没有任何错误,因为len() 函数返回3。与range(3) 一起使用会返回 0、1、2,这与列表中的项目数相符。

总结

在这篇文章中,我们谈到了 Python 中的IndexError: list index out of range 错误。

这个错误通常发生在我们试图通过使用一个在列表中不存在的索引来访问列表中的一个项目。

我们看到了一些例子,显示了在使用循环、len() 函数和range() 函数时,我们是如何得到这个错误的。

我们还看到了如何修复每种情况下的IndexError: list index out of range 错误。

编码愉快!