Python 无循环初始化多维数组
有没有办法在Python中初始化一个多维数组或列表,而不使用循环呢?
12 个回答
8
下面的代码没有使用任何特殊的库,也没有用到 eval:
arr = [[0]*5 for x in range(6)]
而且它不会创建重复的引用:
>>> arr[1][1] = 2
>>> arr
[[0, 0, 0, 0, 0],
[0, 2, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
9
根据你的实际需求,实际上“标准”的库Numpy可能正好能满足你的需要。
比如,你可以用下面的代码创建一个多维数组:
numpy.empty((10, 4, 100)) # 3D array
(这个数组可以用任意值来初始化),或者你也可以用下面的代码创建一个到处都是零的数组:
numpy.zeros((10, 4, 100))
Numpy在处理数组操作时非常快。
13
当然是有办法的
arr = eval(`[[0]*5]*10`)
或者
arr = eval(("[[0]*5]+"*10)[:-1])
不过这个方法很糟糕而且浪费资源,所以大家通常会用循环(一般是列表推导式)或者用numpy库