IndexError:为什么我超出范围?

时间:2016-04-28 14:23:27

标签: python

我一直在阅读"索引超出范围的其他答案"问题,根据我的理解,您不能尝试将值分配给不存在的列表索引。我的第一个代码是:

spam =[]
for i in range(5):
    spam[i]=i
print (spam)

在阅读了其他一些答案之后,我意识到,当我只使用range函数时,i从0开始并且无法分配到列表中。所以我创建了下一小段代码:

spam =[]
for i in range(5):
    i += 1
    spam[i]=i
print (spam)

我仍然遇到同样的错误。我知道i现在在代码的i += 1部分之后获得了值1,所以我认为它应该将列表项1分配为空垃圾邮件列表中的数字1,但它是'那不是这样的。为什么没有创建索引?

2 个答案:

答案 0 :(得分:1)

当你写:

>>> x = []

您将x定义为列表。但它是空的。

当您尝试运行

>>> x[i] = i #let assume i is a number

这意味着您要将数组中元素编号i的值更改为值i。但关键是你的数组中没有元素编号i。你的数组是空的,没有任何元素。您可以使用append()方法为数组提供元素:

>>> x.append(i)

工作正常。然后,您可以使用以前的方式更改此新元素的值。检查一下:

>>> x  = []
>>> x
[]
>>> i = 0
>>> x[i] = i

Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    x[i] = i
IndexError: list assignment index out of range
>>> x.append(i)
>>> x
[0]
>>> x[i] = i
>>> x
[0]
>>> x[i] = 2
>>> x
[2]
>>> 

答案 1 :(得分:0)

spam=[]创建一个长度为0的空列表。然后,您建议的两个循环都会尝试访问不存在的列表元素。您可能需要执行以下操作:

spam = []
for i in range(5):
    spam.append(i)