Python 2.7创建一个多维列表

poo*_*oop 17 python list-comprehension list python-2.7

在Python中,我想要一种直观的方法来创建一个三维列表.

我想要一个(n乘n)列表.因此,对于n = 4,它应该是:

x = [[[],[],[],[]],[[],[],[],[]],[[],[],[],[]],[[],[],[],[]]]
Run Code Online (Sandbox Code Playgroud)

我尝试过使用:

y = [n*[n*[]]]    
y = [[[]]* n for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

这两者似乎都在创建引用的副本.我也尝试过对列表生成器的天真应用,但收效甚微:

y = [[[]* n for i in range(n)]* n for i in range(n)]
y = [[[]* n for i in range(1)]* n for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

我也尝试使用循环迭代地构建数组,但没有成功.我也试过这个:

y = []
for i in range(0,n):
    y.append([[]*n for i in range(n)])
Run Code Online (Sandbox Code Playgroud)

这样做有更简单或更直观的方法吗?

Blc*_*ght 20

我认为你的列表理解版本非常接近工作.您不需要执行任何列表乘法(无论如何都不适用于空列表).这是一个工作版本:

>>> y = [[[] for i in range(n)] for i in range(n)]
>>> print y
[[[], [], [], []], [[], [], [], []], [[], [], [], []], [[], [], [], []]]
Run Code Online (Sandbox Code Playgroud)


小智 6

看起来最简单的方法如下:

def create_empty_array_of_shape(shape):
    if shape: return [create_empty_array_of_shape(shape[1:]) for i in xrange(shape[0])]
Run Code Online (Sandbox Code Playgroud)

这对我有用