![](/img/trans.png)
[英]Python: not sure why I am getting “IndexError: list assignment index out of range” error
[英]Beginner: Why am I getting this error: IndexError: list assignment index out of range
我是 Python 的初学者,想制作一个脚本来从 basketball-reference.com 收集一些篮球统计数据,并根据特定统计数据对列表进行排序。 我知道当您尝试引用不存在该索引的列表中的索引时会抛出此错误。 但是我已经尝试创建一个完全空的列表和一个具有定义范围的列表,但我仍然收到该错误。
代码:
player_first_name = ["Luka", "Nikola", "Giannis", "Stephen", "Jayson"]
player_last_name = ["Doncic", "Jokic", "Antetokounmpo", "Curry", "Tatum"]
player = []
...一些与此无关的代码
for x in range(5):
player[x] = player_first_name[x] + " " + player_last_name[x]
注意:如果我声明 player = []、player = list() 或 player = [] * 5,我会收到此错误,根据我在网上阅读的内容,所有这些都应该没问题。 我可以将此错误排除在 go 之外的唯一方法是,如果我实际上将值放入每个索引(例如 player = ["a", "b", "c", "d", "e"]
如前所述,我尝试将播放器列表声明为:
player = []
player = [] * 5
player = list()
所有这些情况都导致了错误。
player = []
是一个空列表。 如果要为此列表分配值,则必须使用append
或任何其他方法。 这种方法会给你错误:
for x in range(5):
player[x] = player_first_name[x] + " " + player_last_name[x]
#IndexError: list assignment index out of range
你不能简单地做一个for loop
并赋值,因为它是一个空列表。 正确的方法是:
for x in range(5):
player.append(player_first_name[x] + " " + player_last_name[x])
print(player)
#['Luka Doncic', 'Nikola Jokic', 'Giannis Antetokounmpo', 'Stephen Curry', 'Jayson Tatum', 'Luka Doncic', 'Nikola Jokic', 'Giannis Antetokounmpo', 'Stephen Curry', 'Jayson Tatum']
在https://replit.com/languages/python3上玩一下在线 python 解释器 - 您可以在本地进行此操作,但它可以方便地快速检查一些语法并准确了解它们的作用。
让我们一一探讨:
x = []
x[1]= 2
print(x[1])
结果是:
Traceback (most recent call last):
File "main.py", line 2, in <module>
x[1]= 2
IndexError: list assignment index out of range
这是有道理的——我们试图分配给一个不存在的索引。 list()
会做同样的事情。 检查[]*5
东西,我们看到:
print([]*5)
输出[]
所以这是一回事。
print([1]*5)
输出[1, 1, 1, 1, 1]
所以它看起来像一个列表乘以一个数字只是重复列表 - 重复一个空列表只是一个空列表。
x = []
x.append(1)
print(x)
但是,给我们想要的东西,所以这是一种方法。 就我个人而言,我会变得更复杂并做类似的事情:
x= list(map(lambda x : x * 2, range(5)))
print(x)
结果是:
[0,2,4,6,8]
由于我将在下面解释的原因。 在这里, map
function 采用可以对项目和列表执行的 function 和列表,并通过将 function 应用于列表的每个元素来生成列表。 对于你的情况,那看起来像
players = list(map(lambda x : layer_first_name[x] + " " + player_last_name[x], range(5))
我这样做的原因是它是不可变的——值不会改变。 在这种情况下这并不重要,但这是一个需要养成的好习惯。 有一整套围绕它构建的编程范式,因为它们通常更容易分析(对人类和机器而言)。这样做很方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.