我正在尝试在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)]
我理解在第二种情况下需要初始化数组,但有人可以解释一下它在第一种情况下是如何工作的。
答案 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)