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

发布于 2021-02-02 23:14:13

请考虑以下代码:

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

我想这是我不明白的简单事情。有人可以清理吗?

关注者
0
被浏览
99
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    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对象将不允许你将值分配给不存在的索引。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看