为何这个循环扩展列表的代码会出现IndexError: list assignment index out of range?如何反复添加元素到列表?
我尝试写了一些代码,像这样:
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
对象不允许你给一个不存在的索引赋值。