파이썬 사용하여 3D 어레이입니다 만들기

내가 만들고 싶다 어레이입니다 파이썬 (2.7) 를 사용하여 다음과 같은 3D

distance[i][j][k]

난 가봤다네 변수 크기 및 크기가 어레이입니다 해야 합니다. ( n )

전화했는데 사용:

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

하지만 그 didn& # 39, t 작동합니까 것으로 보인다.

아무 생각 없어? 정말 감사합니다!

편집: 만 사용할 수 있어 가히 디푸르트 라이브러리 및 방법 (즉, [[0] n] n) 습관 작동합니까 링크됨 있기 때문에 같은 포인터입니다 그리고 데릭쉐퍼드와 모든 값은 개별

EDIT2: 이미 오토메이티드 해결할 수 있습니다.

질문에 대한 의견 (1)
해결책

[목록 번역] [1] 사용해야 합니다.

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

[1]: http://docs.python.org/tutorial/datastructures.html # 지능형 목록

해설 (0)

그냥 '의 설계됩니다 누마피콜라이 엔드입니다 사례:

 numpy.zeros((i,j,k))

, j 부여하느뇨 배열입니다 치수에는 제로는 가득 차 있습니다.

어떤 따라 필요한 [누마피] (http://pypi.python.org/pypi/numpy) 요구에 맞는 최적의 라이브러리란 수 있습니다.

해설 (2)

옳은 길을 약간만이라도

[[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]

(어떤 you& # 39, re trying to do 기록할 경우 (네스 스노) 등

[[[0]*n]*n]*n

그러나 이는 틀린 http://schmidt. devlib. @Adaman 주석문입니다 이유).

해설 (1)
d3 = [[[0 for col in range(4)]for row in range(4)] for x in range(6)]

d3[1][2][1]  = 144

d3[4][3][0]  = 3.12

for x in range(len(d3)):
    print d3[x]

[[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, 144, 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, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [3.12, 0, 0, 0]]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
해설 (0)
"""
Create 3D array for given dimensions - (x, y, z)

@author: Naimish Agarwal
"""

def three_d_array(value, *dim):
    """
    Create 3D-array
    :param dim: a tuple of dimensions - (x, y, z)
    :param value: value with which 3D-array is to be filled
    :return: 3D-array
    """

    return [[[value for _ in xrange(dim[2])] for _ in xrange(dim[1])] for _ in xrange(dim[0])]

if __name__ == "__main__":
    array = three_d_array(False, *(2, 3, 1))
    x = len(array)
    y = len(array[0])
    z = len(array[0][0])
    print x, y, z

    array[0][0][0] = True
    array[1][1][0] = True

    print array

사용을 선호하지만 누마피. 드라이 '에 대해' 다차원 배열입니다.

해설 (0)

비어 있는 상태로, 추가 초기화중 준수하십시오 경우 모든 필요한 일련의 브래킷에 on the inside ([[]] 대신 [], 이것은 이후 빈 목록 1 수, 바뀌엇어요 &quot redboot용 duplicated&quot. 반대로, 바뀌엇어요 &quot redboot용 duplicate&quot 할 말이 없다.):

distance=[[[[]]*n]*n]*n
해설 (2)
def n_arr(n, default=0, size=1):
    if n is 0:
        return default

    return [n_arr(n-1, default, size) for _ in range(size)]

arr = n_arr(3, 42, 3)
assert arr[2][2][2], 42
해설 (0)