一尘不染

Python-为什么此迭代的列表增长代码使IndexError:列表分配索引超出范围?

python

请考虑以下代码:

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

我想这是我不明白的简单事情。有人可以清理吗?


阅读 451

收藏
2020-02-21

共1个答案

一尘不染

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对象将不允许你将值分配给不存在的索引。

2020-02-21