原文: List Index Out of Range – Python Error Message Solved
在本文中,你将看到一些在 Python 中导致列表索引超出范围(list index out of range)错误的原因。
除了知道为什么会发生此错误之外,你还将学习一些避免它的方法。
让我们开始吧!
如何在 Python 中创建列表
要在 Python 中创建列表对象,你需要:
- 给列表起个名字
- 使用赋值运算符
= - 在方括号
[]内包含 0 个或多个列表项,每个列表项都需要用逗号分隔
例如,要创建一个 names 列表,你可以执行以下操作:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
上面的代码创建了一个名为 names 的列表,它有四个值:Kelly, Nelly, Jimmy, Lenny。
如何在 Python 中检查列表的长度
要检查 Python 中列表的长度,请使用 Python 的内置 len() 方法。
len() 将返回一个整数,它是存储在列表中的项目数。
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
#创建一个名为 name_length 的变量来存储列表的长度
name_length = len(names)
#将变量的值打印到控制台
print(name_length)
#输出
#4
列表中存储了四个项目,因此列表的长度将为 4。
如何在 Python 中访问单个列表项
列表中的每个项目都有自己的索引号。
Python 和大多数现代编程语言中的索引从 0 开始。
这意味着列表中的第一项的索引为 0,第二项的索引为 1,依此类推。
你可以使用索引号来访问单个项目。
要使用其索引号访问列表中的项目,请首先写入列表的名称。然后,在方括号内放入与项目的索引号对应的整数。
以前面的示例为例,你可以通过以下方式使用其索引号访问列表中的每个项目:
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 到 n-1,其中 n 是列表中值的总数。
上面列表的总值为 4,索引范围为 0 到 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 到 -n,其中 -n 是列表中包含的项目总数。
列表中的项目总数为 4,索引范围为 -1 到 -4。
在 Python for 循环中使用 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 到 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”。
当涉及到位置 4 时,它由 range(5) 指定,表示位置 0 到 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() 函数。你可以使用 Python 内置函数 len() 来执行此操作,如前面部分所示:
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 认证。你将通过一种对初学者友好的互动方式学习,你还将构建五个项目以巩固所学的知识。
感谢你阅读本文,祝你编程愉快!