为何这个循环扩展列表的代码会出现IndexError: list assignment index out of range?如何反复添加元素到列表?

253 投票
10 回答
719630 浏览
提问于 2025-04-16 15:40

我尝试写了一些代码,像这样:

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

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

但是我收到了一个错误信息,内容是 IndexError: list assignment index out of range,这个错误是指在 j[k] = l 这一行代码上。为什么会出现这个错误呢?我该怎么解决它呢?

10 个回答

30

j.append(l) 代替 j[k] = l,完全不需要用到 k

66

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

j = [None] * len(i)
399

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 对象不允许你给一个不存在的索引赋值。

撰写回答