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

时间:2011-04-13 18:01:36

标签: python list exception

请考虑以下代码:

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

我想这很简单,我不明白。有人可以清理它吗?

10 个答案:

答案 0 :(得分:260)

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

请尝试以下方法,将新元素添加到列表末尾:

for l in i:
    j.append(l)

答案 1 :(得分:41)

您的另一个选择是初始化j

j = [None] * len(i)

答案 2 :(得分:20)

执行j.append(l)而不是j[k] = l并完全避免k

答案 3 :(得分:12)

你也可以使用列表理解:

j = [l for l in i]

或使用以下声明制作副本:

j = i[:]

答案 4 :(得分:7)

j.append(l)

同时避免使用小写的“L's”,因为它很容易与1的混淆

答案 5 :(得分:6)

我认为Python方法插入是您正在寻找的:

将元素x插入位置i。

array = [1,2,3,4,5]

array.insert(1,2)

print(array)

# prints [1,2,2,3,4,5]

答案 6 :(得分:5)

您可以为j

使用字典(类似于关联数组)
i = [1, 2, 3, 5, 8, 13]
j = {} #initiate as dictionary
k = 0

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

print j

将打印:

{0: 1, 1: 2, 2: 3, 3: 5, 4: 8, 5: 13}

答案 7 :(得分:2)

还有一种方法:

j=i[0]
for k in range(1,len(i)):
    j = numpy.vstack([j,i[k]])

在这种情况下,j将是一个numpy数组

答案 8 :(得分:1)

在带有数组的python中,您只能在数组中添加元素并将其添加

答案 9 :(得分:0)

也许您需要 extend()

i=[1,3,5,7]
j=[]
j.extend(i)