首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python错误: IndexError:列表分配索引超出范围

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

Stack Overflow用户
提问于 2009-06-08 20:57:49
回答 7查看 285关注 0票数 2
代码语言:javascript
复制
a=[]
a.append(3)
a.append(7)

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

当我写这段代码时,它给出了如下错误:

代码语言:javascript
复制
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

我可以知道为什么和如何调试它吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-06-08 21:00:01

更改以下代码行:

代码语言:javascript
复制
a[j]=a[j-2]+(j+2)*(j+3)/2

要这样做:

代码语言:javascript
复制
a.append(a[j-2] + (j+2)*(j+3)/2)
票数 7
EN

Stack Overflow用户

发布于 2009-06-08 21:02:58

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

代码语言:javascript
复制
for j in range(2, 23480):
    a.append(a[j - 2] + (j + 2) * (j + 3) / 2)
票数 6
EN

Stack Overflow用户

发布于 2009-06-08 21:09:15

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

例如,假设您正在创建一个包含10个人的列表,并尝试指定该列表中的第11个人将是谁。在您的笔记本上,可能很容易为另一个人腾出空间,但运行时对象,如python中的列表,就不那么容易了。

你的列表一开始就是空的,原因是:

代码语言:javascript
复制
a = []

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

代码语言:javascript
复制
a.append(3)
a.append(7)

这使得列表的大小足以容纳您添加的两个元素,这两个元素的索引分别为0和1 (python列表从0开始)。

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

同样,像Python中那样的列表通常也不是那么容易理解。

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

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

在您的情况下,您希望进行nbr。2,这意味着您需要重写这行代码:

代码语言:javascript
复制
a[j]=a[j-2]+(j+2)*(j+3)/2

要这样做:

代码语言:javascript
复制
a.append(a[j-2]+(j+2)*(j+3)/2)

这会将一个新元素附加到列表的末尾,这是可以的,而不是尝试为元素N+1赋一个新值,其中N是列表的当前长度,这是不可以的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/966983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档