使用Python创建3D数组

发布于 2021-01-29 15:09:56

我想在Python(2.7)中创建一个3D数组,以便像这样使用:

distance[i][j][k]

数组的大小应该是我拥有的变量的大小。(n n n)

我尝试使用:

distance = [[[]*n]*n]

但这似乎不起作用。

我只能使用默认库,并且乘法(即[[0]*n]*n)的方法将不起作用,因为它们链接到相同的指针,并且我需要所有值都是单独的

关注者
0
被浏览
184
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您应该使用列表理解

    >>> 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]]]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看