Python 无循环初始化多维数组

9 投票
12 回答
32218 浏览
提问于 2025-04-16 03:49

有没有办法在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库

撰写回答