2017-11-03 25 views
-1

5x5matというリストのリストがあるとします。Pythonで2Dリスト/配列の列ベクトルを初期化するにはどうすればよいですか?

それから私は

mat[0][4] = 'X' 
mat[1][4] = 'O' 
mat[2][4] = 'R' 
mat[3][4] = 'N' 
mat[4][4] = 'A' 

を次のように要素ごとにMATLABを行う可能性がありますどのようなPythonに1行で、この列ベクトルを初期化する方法はあり、「列」を初期化しますか?

mat[:,4] = ['X','O','R','N','A'] 
+1

は、MATLABの2次元マトリックスとpythonでリストのリストを混乱するように注意してください:ここで

はPythonで多次元配列を回転させる方法です。 MATLABへのより直接的なマップが必要な場合は、 'numpy'をチェックしてください。私は文字を要素として使用することに反対していますが。 –

+1

私はこれが伝統的な暗号のために使われていると思いますが、5 * 5グリッドの文字が共通です(英語のアルファベットは26文字で、普通の文字はある規則に従ってドロップ/置換できます)。 –

答えて

1

ほど簡潔な、しかしない:若干短く、

for i,x in enumerate(['X','O','R','N','A']): mat[i][4]=x 

または単一文字の場合:

for i,x in enumerate('XORNA'): mat[i][4]=x 

また、あなたはnumpyを使用することができます

import numpy 
mat=numpy.array([[' ' for i in range(5)] for j in range(5)]) 
mat[:,4] = ['X','O','R','N','A'] 
+0

私は行列の作成を 'mat = numpy.empty((5,5)、dtype = object)'に変更したいと思います。二重リストの理解度がはっきりしているようです。コードが間違っていないので自分自身を編集したくない;) –

-1

私は数年前に数独アルゴリズムを開発している間に同様の問題を抱えていました。私は頻繁にカラムとローを入れ替えなければならず、ネストされた "for"は私を殺す場所でした。

私は行列を回転させ、すべてを常に行として扱うという簡単な解決法を考え出しました。最適化が問題でない場合は、それを行うことができます。 Rotating a two-dimensional array in Python

+0

転置の代わりに移調することは、概念的にはより明確になり(コードは少なくなる)。しかし、はい、これも動作します。 –

関連する問題