pythonの2次元配列のリスト(list)を転置する方法について、サンプルコードを交えながら紹介します。
2次元配列のリストを転置させる方法はいくつかあります。
メソッド1つで一瞬で転置させる方法や、泥臭くforループで転置する方法を紹介します。
(一度泥臭い方法も知っておくと、勉強になると思います。)
この記事で分かること
- 【参考】2次元配列の綺麗な表示方法
- forループで、2次元配列を転置する
- numpyを利用して、2次元配列を転置する
スポンサーリンク
【参考】2次元配列の綺麗な表示方法
はじめに、2次元配列のリストを綺麗に表示する方法を紹介します。
行列っぽく表示することで、より転置のイメージがしやすくなると思います。
興味のない方は、読み飛ばしてください。
単純にprint( )で表示しようとすると、行列のようには表示されません。
### 2次元配列を、単純にprint( )で表示
matrix = [
[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
]
print(matrix)
# [[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34]]
これだと、転置のイメージが湧きにくいですよね。
以下で、2次元配列を綺麗に表示する方法を、2つ紹介します。
forループで表示する方法
はじめに、forループで2次元配列を綺麗に表示する方法です。
### forループで2次元配列を綺麗に表示するサンプルコード
matrix = [
[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
]
for i in range(len(matrix)):
print(matrix[i])
"""
[11, 12, 13, 14]
[21, 22, 23, 24]
[31, 32, 33, 34]
"""
アンパッキングと、区切り文字 "\n" で表示する方法
リスト型に、*(アスタリスク)を付与すると、要素をアンパッキングできます。
アンパッキングとは、リストなどの要素を分解して、複数の変数などに渡せるようにすることを言います。
リストの要素をアンパッキングすることで、
print( )で表示するときに、区切り文字( sep = ○○ )を指定できるようになります。
この区切り文字に、改行を表す「"\n"」を指定することで、2次元配列を綺麗に表示できます。
### アンパッキングと、区切り文字 "\n" で2次元配列を綺麗に表示するサンプルコード
matrix = [
[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
]
print(*matrix, sep='\n')
"""
[11, 12, 13, 14]
[21, 22, 23, 24]
[31, 32, 33, 34]
"""
スポンサーリンク
forループで、2次元配列を転置する
はじめに、泥臭く、forループを用いて、2次元配列を転置する方法を紹介します。
そこまで難しくはないので、コードをみて動作を追ってみてください。
### forループで2次元配列を転置するサンプルコード
matrix = [
[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
]
matrix_t = []
for i in range(len(matrix[0])) :
tmp = []
for v in matrix :
tmp.append(v[i])
matrix_t.append(tmp)
print(*matrix_t, sep='\n')
"""
[11, 21, 31]
[12, 22, 32]
[13, 23, 33]
[14, 24, 34]
"""
内側の " for v in matrix " のループで、matrix内の行を1つずつ取り出しています。
つまり、[ 11, 12, 13, 14 ]、[ 21, 22, 23, 24 ]、[ 31, 32, 33, 34 ]を順に取り出します。
外側のループが i = 0の場合は、v[0]となるので、
それぞれの行の0番目の要素を、appendでtmpリストに追加していきます。
つまり、tmpリストには、[ 11, 21, 31 ]が格納されます。
このtmpリストを、matrix_tリストにappendで追加することで、転置リストの1行目になります。
この動作を繰り返すことで、2次元配列の転置を行っています。
スポンサーリンク
numpyを利用して、2次元配列を転置する
これが最も簡単な方法です。
numpyという数値計算ライブラリを用いると、簡単に2次元配列を転置できます。
リストをnumpy型に変換した後に、「 .T 」を付与するだけで転置できます。
以下、サンプルコードです。
### numpyを利用して、2次元配列を転置するサンプルコード
import numpy as np
matrix = [
[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
]
print(type(matrix))
# <class 'list'>
matrix_np = np.array(matrix)
print(type(matrix_np))
# <class 'numpy.ndarray'>
matrix_np_t = matrix_np.T
print(matrix_np_t)
"""
[[11 21 31]
[12 22 32]
[13 23 33]
[14 24 34]
"""
matrix_np_t_list = matrix_np_t.tolist()
print(type(matrix_np_t_list))
# <class 'list'>
最後の、
matrix_np_t_list = matrix_np_t.tolist()
print(type(matrix_np_t_list))
の部分は無くても問題ありません。
numpy型の配列を、リストに戻しています。
スポンサーリンク
まとめ
pythonの2次元配列のリスト(list)を転置する方法について紹介しました。
便利なのはnumpyを用いた転置ですが、forループを用いた転置を理解しておくと応用が利くので、自分で動かしてみて理解を深めてみてください。
スポンサーリンク