我试着写了一些代码:

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

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

但是我得到一条错误消息,说IndexError: list赋值索引超出范围,指向代码的j[k] = l行。为什么会出现这种情况?我该怎么解决呢?


当前回答

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

需要意识到的是,列表对象不允许为不存在的索引赋值。

其他回答

用j.append(l)代替j[k] = l,并完全避免k。

也许你需要extend()

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

还有一种方法:

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

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

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

需要意识到的是,列表对象不允许为不存在的索引赋值。

你也可以使用列表推导式:

j = [l for l in i]

或者用下面的语句复制一份:

j = i[:]