1. ホーム
  2. python

[解決済み] Pythonで3D配列を作成する

2022-03-04 21:19:18

質問

Python(2.7)で3次元配列を作成して、このような使い方をしたいのですが、どうすればよいでしょうか?

distance[i][j][k]

そして、配列のサイズは、私が持っている変数のサイズにする必要があります。(n n n)

を使ってみました。

distance = [[[]*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]]]