Python错误:IndexError:列表赋值索引超出范围

2 投票
7 回答
3863 浏览
提问于 2025-04-15 12:06
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这样的列表通常不会那么宽容。

相反,你需要做两件事情中的一件:

  1. 在某些情况下,你想要存储到一个已有的元素中,或者根据你指定的索引是否可用来添加一个新元素
  2. 在其他情况下,你总是想要添加一个新元素

在你的情况下,你想做第二种,这意味着你需要把这行代码改成:

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)

撰写回答