列表索引超出范围--Python错误信息已解决

220 阅读6分钟

在这篇文章中,你将看到导致list index out of range Python 错误的几个原因。

除了知道这个错误首先发生的原因,你还会学到一些避免它的方法。

让我们开始吧!

如何在 Python 中创建一个列表

要在 Python 中创建一个列表对象,你需要:

  • 给列表一个名字。
  • 使用赋值运算符,=
  • 并在方括号内包含 0 个或多个列表项,[] 。每个列表项都需要用逗号来分隔。

例如,要创建一个名字的列表,你应该这样做:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

上面的代码创建了一个名为names 的列表,它有四个值:Kelly, Nelly, Jimmy, Lenny

如何在 Python 中检查一个列表的长度

要在 Python 中检查一个列表的长度,可以使用 Python 内置的len() 方法。

len() 将返回一个整数,它是存储在列表中的项目的数量:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

#create a variable called name_length to store the length of the list
name_length = len(names)

#print value of variable to the console
print(name_length)

#output
#4

列表中有四个项目,因此列表的长度是四。

如何在 Python 中访问单个列表项

列表中的每个项目都有自己的索引号。 在 Python 和大多数现代编程语言中,索引从 0 开始。

这意味着列表中的第一个项目的索引是 0,第二个项目的索引是 1,以此类推。 你可以使用索引号来访问各个项目。 要使用索引号访问列表中的一个项目,首先要写出列表的名称。然后,在方括号内写上与该项目索引号相对应的intiger。 以前面的例子为例,这就是你如何使用索引号访问列表中的每个项目。

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

names[0] # Kelly
names[1] # Nelly
names[2] # Jimmy
names[3] # Lenny

在 Python 中,你也可以使用负数索引来访问列表中的项目。

要访问最后一个项目,你使用-1的索引值;要访问倒数第二项,你使用-2的索引值。

下面是你如何使用负数索引访问列表中的每个项目:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

names[-4] # Kelly
names[-3]# Nelly
names[-2] # Jimmy
names[-1] # Lenny

为什么在 Python 中会出现Indexerror: list index out of range 错误?

使用一个超出列表范围的索引号

当你试图用一个超出列表索引范围且不存在的值来访问一个项目时,你会得到Indexerror: list index out of range 错误。

当你试图访问一个列表的最后一个项目时,这种情况很常见,如果你使用的是负数索引,则是第一个项目。

让我们回到到目前为止我们所使用的那个列表:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

假设我想访问最后一项,"Lenny",并试图用下面的代码来实现:

print(names[4])

#output

#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in <module>
#    print(names[4])
#IndexError: list index out of range

一般来说,一个列表的索引范围是0 to n-1n 是列表中的总数值。 上面这个列表的总数值是4 ,索引范围是0 to 3 。 现在,让我们试着用负数索引来访问一个项目。

假设我想通过使用负数索引来访问列表中的第一个项目 "Kelly":

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

print(names[-5])

#output

#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in <module>
#    print(names[-5])
#IndexError: list index out of range

当使用负数索引时,列表的索引范围是-1 to -n ,其中-n 列表中包含的项目总数。

如果列表中的项目总数是4 ,那么索引范围是-1 to -4

在 Pythonfor 循环中的range() 函数中使用错误的值

当遍历一个列表并试图访问一个不存在的项目时,你会得到Indexerror: list index out of range 的错误。 发生这种情况的一个常见例子是,你在 Python 的range() 函数中使用了错误的整数。

range() 函数通常输入一个整数,它表示计数将在哪里停止。 例如,range(5) 表示计数将从0 开始,在4 结束。 因此,默认情况下,计数从位置0 开始,每次增加1 ,数字一直到--但不包括--计数停止的位置。

让我们来看看下面的例子:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(5):
    print(names[name])
    
#output

#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 7, in <module>
#   print(names[name])
#IndexError: list index out of range

这里,列表names 有四个值。 我想循环浏览这个列表并打印出每个值。 当我使用range(5) 时,我告诉 Python 解释器打印位于0 to 4 位置的值。 然而,在位置 4 上没有任何项目。

你可以通过首先打印出位置的编号,然后打印出该位置的值来看到这一点:

#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny
#4
#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 8, in <module>
#    print(names[name])
#IndexError: list index out of range

你可以看到在位置0 是 "Kelly",在位置1 是 "Nelly",在位置2 是 "Jimmy",在位置3 是 "Lenny"。

当涉及到位置四时,即用range(5) ,它表示0 to 4 的位置,没有任何东西可以打印出来,因此解释器抛出一个错误。

解决这个问题的一个方法是降低range() 中的整数:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(4):
    print(name)
    print(names[name])
    
#output

#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny

当使用for 循环时,另一个解决这个问题的方法是将列表的长度作为参数传递给range() 函数。你可以通过使用len() 内置的 Python 函数来做到这一点,如前面一节中所示:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(len(names)):
    print(names[name])

#output

#Kelly
#Nelly
#Jimmy
#Lenny

当把len() 作为参数传给range() 时,要确保不犯以下错误:

names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(len(names) + 1):
    print(names[name])

运行该代码后,你会再次得到一个IndexError: list index out of range 的错误:

#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 4, in <module>
#    print(names[name])
#IndexError: list index out of range

结论

希望这篇文章能让你了解为什么会出现IndexError: list index out of range 错误,以及一些可以避免它的方法。

如果你想学习更多关于Python的知识,请查看freeCodeCamp的Python认证。你将以一种相互交流和适合初学者的方式开始学习。你还会在最后建立五个项目,将其付诸实践,帮助巩固你所学的知识。

谢谢你的阅读,祝你编码愉快