を用いた3次元配列を作成します。 (N * n個の* n)では、Python
私が使用してみました:
distance = [[[]*n]*n]
をそれが動作していないようでした。
アイデア?どうもありがとう!
EDIT:私は、同じポインタにリンクされているため、すべての値を必要とするため、デフュルトライブラリのみを使用できます([[0] * n] * n)は機能しません。個別
EDIT2:既に以下の回答で解決済みです。
を用いた3次元配列を作成します。 (N * n個の* n)では、Python
私が使用してみました:
distance = [[[]*n]*n]
をそれが動作していないようでした。
アイデア?どうもありがとう!
EDIT:私は、同じポインタにリンクされているため、すべての値を必要とするため、デフュルトライブラリのみを使用できます([[0] * n] * n)は機能しません。個別
EDIT2:既に以下の回答で解決済みです。
あなたはlist comprehensionを使用する必要があります。
>>> 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
あなたが試したもののように見えた文でデータ構造を作成し、それことができました内側のリストはcopy-by-rなので、副作用があったでしょうリファレンス:
>>> 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]]]
ありがとう、これはうまくいくようです。私は自分のプログラムでテストし、すぐに結果を返します。 –
正しい方法@Adamanコメント理由を参照してください、
[[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
(あなたが何をしようとして)NxNxNのため(のように記述する必要があります
[[[0]*n]*n]*n
もよいが、それは正しくないでしょう)。
いいえ。同じ配列への参照を含みます。これを試してみましょう: 'a = [[0] * 3] * 3; a [0] [0] = 1; print a ' – Amadan
numpy.array
のはまさにこのケースのために設計されています
numpy.zeros((i,j,k))
はあなたにゼロで満たされた私J K、次元の配列を与えます。
必要に応じて、が必要なライブラリになる場合があります。
ありがとう、私はこれを試してみる –
ああ、これは嫌な人のライブラリの1つだと思った。私はそれ以外のものを使うことはできません。 –
いいえ、残念ながら、それは外部のライブラリです。通常大規模な数値データの配列を処理する必要がある場合は非常に適しています。特にスピードが問題になる場合。 – mata
空に初期化するすべてを主張する場合は、内側に[[]]ではなく["]を追加する必要があります。これは"複製する空リストを1つ含むリスト "です。 「複製することは何も含まないリスト」):
distance=[[[[]]*n]*n]*n
これをしないでください。そうしないと、すべて同じ参照を指します。 –
はい、私の問題は、私がそれらのうちの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]]
'col'、' row'と 'x'の説明に感謝します! – Gluttton
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
"""
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
は、多次元アレイのnumpy.ndarray
を使用することを好みます。
標準の 'array'モジュールの' array'クラスの使用を検討してください。 – martineau