首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个迭代的列表增长代码会给出超出范围的IndexError:列表赋值索引?

为什么这个迭代的列表增长代码会给出超出范围的IndexError:列表赋值索引?
EN

Stack Overflow用户
提问于 2011-04-14 02:01:36
回答 7查看 635.5K关注 0票数 231

请考虑以下代码:

i = [1, 2, 3, 5, 8, 13]
j = []
k = 0

for l in i:
    j[k] = l
    k += 1

print j

输出( Win 7 32位上的Python 2.6.6 )是:

> Traceback (most recent call last): 
>     j[k] = l IndexError: list assignment index out of range

我想这是一些我不理解的简单的东西。有人能把它弄清楚吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-14 02:03:47

j是一个空列表,但您试图在第一次迭代中写入元素[0],但该元素尚不存在。

请尝试执行以下操作,将新元素添加到列表的末尾:

for l in i:
    j.append(l)

当然,如果您只想复制一个现有的列表,那么在实践中您永远不会这样做。你只需要做:

j = list(i)

或者,如果您希望像使用其他语言中的数组一样使用Python列表,那么您可以预先创建一个列表,将其元素设置为空值(在下面的示例中为None),然后在特定位置覆盖这些值:

i = [1, 2, 3, 5, 8, 13]
j = [None] * len(i)
#j == [None, None, None, None, None, None]
k = 0

for l in i:
   j[k] = l
   k += 1

需要认识到的是,list对象不允许您为不存在的索引赋值。

票数 370
EN

Stack Overflow用户

发布于 2012-01-27 10:15:00

另一种选择是初始化j

j = [None] * len(i)
票数 59
EN

Stack Overflow用户

发布于 2011-04-14 02:03:13

使用j.append(l)而不是j[k] = l,完全避免使用k

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

https://stackoverflow.com/questions/5653533

复制
相关文章

相似问题

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