使用python list comprehension定义二维数组

时间:2018-05-26 10:16:12

标签: arrays python-3.x

我正在尝试在python中创建一个二维数组。但是我对初始化数组的要求感到困惑。 此问题与How to define a two-dimensional array in Python

有关

当我使用列表理解时:

out = [[ i*j for j in range (Y)] for i in range (X)]
print (out)

这里我不需要初始化任何数组。但在第二种情况下:

out = []
for i in range (X):
    for j in range (Y):
        out[i][j] = i*j

如果没有首先将数组初始化为:

,则无效
out = [[ 0 for j in range (Y)] for i in range (X)]

我理解在第二种情况下需要初始化数组,但有人可以解释一下它在第一种情况下是如何工作的。

2 个答案:

答案 0 :(得分:0)

列表推导是使用一些数据初始化数组的单个语句,因此您不需要进行另一次初始化。在第二种情况下,您需要先为数组初始化数组,然后再为其元素赋值。

答案 1 :(得分:0)

语句out = []创建一个空列表:当您尝试使用out[3] = foo按索引访问该列表中的项目时,您说“让我获得第3个元素” out的{​​{1}}并将其设置为foo'。但是空列表还没有第3个元素 - 你需要添加元素,然后为它们赋值。

在这种情况下,最简单的方法是为数组指定零值,然后使用i*j的值覆盖它们:

out = [0]*X # <- initialise outer list
for i in range (X):
    out[i] = [0]*Y # <- initialise each row of inner list
    for j in range (Y):
        out[i][j] = i*j

print(out)