4

重複の可能性:
Pythonで2次元配列を初期化する方法は?

2次元配列に関する簡単な問題を解決する際に、このサイトで、オーバーロード演算子を使用してPythonで1つを宣言する方法を説明する解決策に出くわしました。

例:

Myarray = [[0]*3]*3

これにより、次の配列(リスト)が生成されます

[[0,0,0],[0,0,0],[0,0,0]]

これは、使用するまでは問題ないようです。

たとえば、要素を割り当てる場合:

Myarray [0][0] = 1

予期しない出力が表示されます。

[[1,0, 0],[1,0,0] , [1,0,0]]

実際には、Myarray[1][0]とMyarray[2][0]を同時に割り当てます

私の解決策:

Myarray = [[][][]]
for i in range(0,3):
  for j in range (0,3):
     Myarray[i].append(0)

このソリューションは意図したとおりに機能します。

Marray[0][1] = 1

あなたにあげる

[[1,0, 0],[0,0,0] , [0,0,0]]

これを行うためのより簡単な方法はありますか?これはケンブリッジのAレベルの質問に対する解決策であり、他の言語と比較して学生にとっては長すぎるようです。

4

1 に答える 1

6

バニラのPythonでは、ネストされたリスト内包表記であるこれを使用できます

>>> m = [[0 for y in range(3)] for x in range(3)]
>>> m
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

例で示した乗算リストとは異なり、望ましい動作をしています

>>> m[1][0] = 99
>>> m
[[0, 0, 0], [99, 0, 0], [0, 0, 0]]

ただし、多次元配列や数値プログラミングを真剣に使用する場合は、Numpy配列を使用することをお勧めします。

于 2012-11-09T00:01:11.447 に答える