enumerate()
この関数を使用して、両方のマトリックス値をループし、インデックスを付けることができます。
newMatrix = [[0] * len(matrix) for _ in xrange(len(matrix[0]))]
for i, row in enumerate(matrix):
for j, value in enumerate(row):
newMatrix[j][i] = value
これは以下を出力します:
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
新しいマトリックスの行と列を直接アドレス指定しているため、最初にその新しいマトリックスを空の値で初期化する必要があります。私の例の最初の行のリスト内包はあなたのためにこれを行います。サイズ(x、y )の入力行列が与えられると、サイズが( y、x )の新しい行列を作成します。
zip
または、次の関数を(ab)使用することで、明示的なループを完全に回避できます。
newMatrix = zip(*matrix)
これは、の各行をmatrix
取得し、それらの行の各列を新しい行にグループ化します。
一般的なケースでは、Pythonfor
はシーケンスのループを構築します。range()
andxrange()
関数は、数値シーケンスを生成できます。これらは、for
CまたはJavaScriptのループが生成するのとほぼ同じ方法で数列を生成します。
>>> for i in range(5):
>>> print i,
0 1 2 3 4
しかし、この構成はCスタイルの構成よりもはるかに強力ですfor
。ほとんどのそのようなループでは、あなたの目標はいくつかのシーケンスにインデックスを提供することです、pythonコンストラクトはインデックスをバイパスし、代わりにシーケンスの値に直接行きます。