【问题标题】:Error in Creating a 2d array via plain for loop iteration but not if created via list comprehension通过普通 for 循环迭代创建二维数组时出错,但如果通过列表理解创建则不会
【发布时间】:2022-01-03 18:04:43
【问题描述】:

我正在尝试通过以下两种方法创建二维数组。现在,当我使用列表理解时,我得到了 2d 数组,但是当我使用正常的 for 循环时,我收到了 Index out of bound 的错误。有人可以解释一下为什么会这样吗?

r=3
c=4
new = []
temp =[]
for i in range(r):
    for j in range(c):
        new[i][j]=0
        
print(new)

结果 - IndexError: 列表索引超出范围

temp = [[0 for _ in range(c)] for _ in range(r)]
print("Temp", temp)

结果 - [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    您正在尝试访问空列表中的值,请使用 append 和辅助列表,如下所示:

    >>> for i in range(r):
    ...     aux = []
    ...     for j in range(c):
    ...             aux.append(0)
    ...     new.append(aux)
    

    【讨论】:

    • 谢谢@Pedro...这很有帮助。
    【解决方案2】:

    第二种方法

    temp = [[0 for _ in range(c)] for _ in range(r)]
    

    您将新的temp 列表的每个元素设置为另一个列表并填写。

    当您在第一种方法中执行此操作时:

    new[i][j]=0
    

    您有两个问题,首先new[i] 超出了零大小列表的范围。这爆炸了。如果它没有给出错误,那么你就试图索引一个不存在的东西。即使您可以默认将其设为空列表,索引j 也会超出范围。

    【讨论】:

    • 这是一个很好的解释。谢谢医生爱。
    猜你喜欢
    • 2021-02-01
    • 2020-05-15
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2017-03-25
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多