没有循环的Python多维数组初始化

Leo*_*nid 9 python

有没有办法在Python中初始化多维数组/列表而不使用循环?

Joh*_*ooy 13

肯定有办法

arr = eval(`[[0]*5]*10`)
Run Code Online (Sandbox Code Playgroud)

要么

arr = eval(("[[0]*5]+"*10)[:-1])
Run Code Online (Sandbox Code Playgroud)

但它太可怕了,浪费了,所以每个人都使用循环(通常是列表推理)或numpy


Eri*_*got 9

根据您的实际需求,事实上的"标准"包Numpy可能会为您提供您所需要的.

例如,您可以创建一个多维数组

numpy.empty((10, 4, 100))  # 3D array
Run Code Online (Sandbox Code Playgroud)

(使用任意值初始化)或创建具有随处可见的相同数组

numpy.zeros((10, 4, 100))
Run Code Online (Sandbox Code Playgroud)

对于阵列操作,Numpy非常快.


Jac*_*son 7

当然,你可以做到

mylist = [
            [1,2,3],
            [4,5,6],
            [7,8,9]
         ]
Run Code Online (Sandbox Code Playgroud)

  • 你是完全正确的,我不会问这将如何寻找矩阵1000 X 1000 ...... (3认同)

use*_*088 5

我不相信这是可能的。

你可以这样做:

>>> a = [[0] * 5] * 5
Run Code Online (Sandbox Code Playgroud)

创建一个 5x5 矩阵,但它是重复的对象(这是你不想要的)。例如:

>>> a[1][2] = 1
[[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

您几乎肯定需要使用某种循环,如下所示:

[[0 for y in range(5)] for x in range(5)]
Run Code Online (Sandbox Code Playgroud)


Jen*_*man 5

以下内容不使用任何特殊的库,也不使用eval:

arr = [[0]*5 for x in range(6)]
Run Code Online (Sandbox Code Playgroud)

并且不会创建重复的引用:

>>> 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]]
Run Code Online (Sandbox Code Playgroud)