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

| 请考虑以下代码:
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
我想这很简单,我不明白。有人可以清理吗?     
已邀请:
j
是一个空列表,但是您正在尝试在第一次迭代中写入元素
[0]
,但该迭代尚不存在。 请尝试以下操作,以将新元素添加到列表的末尾:
for l in i:
    j.append(l)
当然,如果您只想复制一个现有列表,则您永远不会在实践中这样做。您只需执行以下操作:
j = list(i)
另外,如果您想像其他语言的数组一样使用Python列表,则可以预先创建一个列表,并将其元素设置为空值(在下面的示例中为6),然后覆盖特定位置的值:
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
要意识到的是,“ 8”对象将不允许您将值分配给不存在的索引。     
您的另一个选择是初始化
j
j = [None] * len(i)
    
用ѭ11代替ѭ12并完全避免ѭ13。     
您还可以使用列表理解:
j = [l for l in i]
或使用以下语句复制它:
j = i[:]
    
j.append(l)
还要避免使用小写的“ L”,因为它们很容易与1混淆。     
您可以为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}
    
我认为您正在寻找Python方法插入项: 在位置i处插入元素x。 list.insert(i,x)
array = [1,2,3,4,5]

array.insert(1,20)

print(array)

# prints [1,2,20,3,4,5]
    
另一种方式:
j=i[0]
for k in range(1,len(i)):
    j = numpy.vstack([j,i[k]])
在这种情况下,“ 2”将是一个numpy数组     
在带有数组的python中,您只能在数组中追加和添加元素     
也许你需要extend()
i=[1,3,5,7]
j=[]
j.extend(i)
    

要回复问题请先登录注册