Python错误:索引器错误:列表分配索引超出范围

2024-04-26 22:35:23 发布

您现在位置:Python中文网/ 问答频道 /正文

a=[]
a.append(3)
a.append(7)

for j in range(2,23480):
    a[j]=a[j-2]+(j+2)*(j+3)/2

当我写这段代码时,会出现如下错误:

^{pr2}$

我能知道为什么和如何调试它吗?在


Tags: 代码infor错误rangeappendpr2
3条回答

错误的原因是,正如错误消息所说,您试图访问列表中当前超出范围的部分。在

例如,假设您要创建一个10人的列表,并尝试指定该列表中第11个人将是谁。在你的便笺簿上,仅仅为另一个人腾出空间可能很容易,但是运行时对象,比如python中的列表,就不那么宽容了。在

由于以下原因,您的列表一开始是空的:

a = []

然后使用以下代码向其中添加2个元素:

^{pr2}$

这使得列表的大小刚好可以容纳2个元素,即您添加的两个元素,其索引为0和1(python列表基于0)。在

在代码中,再往下,指定元素j的内容,从2开始,代码会立即爆炸,因为您试图说“对于2个元素的列表,请将以下值存储为第3个元素”。在

同样,类似Python中的列表通常也不那么宽容。在

相反,你必须做两件事中的一件:

  1. 在某些情况下,您希望存储到现有元素中,或添加一个新元素,具体取决于指定的索引是否可用
  2. 在其他情况下,您总是希望添加新元素

在你的情况下,你想做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是列表的当前长度,这是不正常的。在

你在添加新的元素,那些还不存在的元素。因此,您需要使用append:由于这些项还不存在,因此不能通过索引引用它们。Overview of operations on mutable sequence types。在

for j in range(2, 23480):
    a.append(a[j - 2] + (j + 2) * (j + 3) / 2)

更改这行代码:

a[j]=a[j-2]+(j+2)*(j+3)/2

为此:

^{pr2}$

相关问题 更多 >