我想在Python(2.7)中创建一个3D数组,以便像这样使用:
distance[i][j][k]
数组的大小应该是我拥有的变量的大小。(n n n)
我尝试使用:
distance = [[[]*n]*n]
但这似乎不起作用。
我只能使用默认库,并且乘法(即[[0]*n]*n)的方法将不起作用,因为它们链接到相同的指针,并且我需要所有值都是单独的
[[0]*n]*n
您应该使用列表理解:
>>> import pprint >>> n = 3 >>> distance = [[[0 for k in xrange(n)] for j in xrange(n)] for i in xrange(n)] >>> pprint.pprint(distance) [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]] >>> distance[0][1] [0, 0, 0] >>> distance[0][1][2] 0
您本可以使用一个看起来像您尝试过的语句来生成数据结构,但是由于内部列表是按引用复制的,因此它会产生副作用:
>>> distance=[[[0]*n]*n]*n >>> pprint.pprint(distance) [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]] >>> distance[0][0][0] = 1 >>> pprint.pprint(distance) [[[1, 0, 0], [1, 0, 0], [1, 0, 0]], [[1, 0, 0], [1, 0, 0], [1, 0, 0]], [[1, 0, 0], [1, 0, 0], [1, 0, 0]]]