在这篇文章中,你将看到导致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-1 ,n 是列表中的总数值。
上面这个列表的总数值是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认证。你将以一种相互交流和适合初学者的方式开始学习。你还会在最后建立五个项目,将其付诸实践,帮助巩固你所学的知识。
谢谢你的阅读,祝你编码愉快