Python错误:IndexError:列表赋值索引超出范围
a=[]
a.append(3)
a.append(7)
for j in range(2,23480):
a[j]=a[j-2]+(j+2)*(j+3)/2
当我写这段代码时,它会出现这样的错误:
Traceback (most recent call last):
File "C:/Python26/tcount2.py", line 6, in <module>
a[j]=a[j-2]+(j+2)*(j+3)/2
IndexError: list assignment index out of range
我可以知道为什么会这样吗?还有怎么去调试它?
7 个回答
3
这个错误的原因是,你试图访问一个列表中目前不存在的部分,正如错误信息所说的那样。
举个例子,假设你正在创建一个包含10个人的列表,但你试图指定第11个人是谁。在纸上写的时候,可能很容易就为另一个人留出空间,但在运行时的对象,比如Python中的列表,就没有那么宽容了。
你的列表一开始是空的,原因如下:
a = []
然后你用这段代码添加了2个元素:
a.append(3)
a.append(7)
这样列表的大小刚好可以容纳你添加的2个元素,它们的索引分别是0和1(Python的列表是从0开始计数的)。
在你的代码后面,你指定了元素j
的内容,而j
的值是2,这时你的代码就会出错,因为你试图说“对于一个包含2个元素的列表,请把以下值存储为第3个元素”。
再次强调,像Python这样的列表通常不会那么宽容。
相反,你需要做两件事情中的一件:
- 在某些情况下,你想要存储到一个已有的元素中,或者根据你指定的索引是否可用来添加一个新元素
- 在其他情况下,你总是想要添加一个新元素
在你的情况下,你想做第二种,这意味着你需要把这行代码改成:
a[j]=a[j-2]+(j+2)*(j+3)/2
改成:
a.append(a[j-2]+(j+2)*(j+3)/2)
这样会在列表的末尾添加一个新元素,这样是可以的,而不是试图给第N+1个元素赋值,其中N是当前列表的长度,这样是不可以的。
6
你正在添加一些新的元素,这些元素现在还不存在。所以你需要使用 append
方法:因为这些项目还没有被创建,所以你不能通过索引来引用它们。可变序列类型操作的概述。
for j in range(2, 23480):
a.append(a[j - 2] + (j + 2) * (j + 3) / 2)
7
把这行代码改成这样:
a[j]=a[j-2]+(j+2)*(j+3)/2
改成:
a.append(a[j-2] + (j+2)*(j+3)/2)