原文: List Index Out of Range – Python Error [Solved]

在本文中,我们将讨论 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(第一项)=> 索引 0
JavaScript(第二项)=> 索引 1
Java(第三项)=> 索引 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 错误。

祝你编程愉快!