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我可以知道为什么和如何调试它吗?
发布于 2009-06-08 21:00:01
更改以下代码行:
a[j]=a[j-2]+(j+2)*(j+3)/2要这样做:
a.append(a[j-2] + (j+2)*(j+3)/2)发布于 2009-06-08 21:02:58
您正在添加新的元素,这些元素还不存在。因此,您需要使用append:因为这些项还不存在,所以不能通过索引引用它们。Overview of operations on mutable sequence types。
for j in range(2, 23480):
a.append(a[j - 2] + (j + 2) * (j + 3) / 2)发布于 2009-06-08 21:09:15
错误的原因是,正如错误消息所说,您正在尝试访问列表中当前超出范围的一部分。
例如,假设您正在创建一个包含10个人的列表,并尝试指定该列表中的第11个人将是谁。在您的笔记本上,可能很容易为另一个人腾出空间,但运行时对象,如python中的列表,就不那么容易了。
你的列表一开始就是空的,原因是:
a = []然后,使用以下代码向其添加2个元素:
a.append(3)
a.append(7)这使得列表的大小足以容纳您添加的两个元素,这两个元素的索引分别为0和1 (python列表从0开始)。
在下面的代码中,然后指定从2开始的元素j的内容,代码立即爆炸,因为您试图说“对于包含2个元素的列表,请将以下值存储为第三个元素”。
同样,像Python中那样的列表通常也不是那么容易理解。
相反,你必须做以下两件事中的一件:
在您的情况下,您希望进行nbr。2,这意味着您需要重写这行代码:
a[j]=a[j-2]+(j+2)*(j+3)/2要这样做:
a.append(a[j-2]+(j+2)*(j+3)/2)这会将一个新元素附加到列表的末尾,这是可以的,而不是尝试为元素N+1赋一个新值,其中N是列表的当前长度,这是不可以的。
https://stackoverflow.com/questions/966983
复制相似问题