文法・環境 組み込み関数

【python】リスト(list)の転置。2次元配列の行と列の入れ替え方法。

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ループを用いた転置を理解しておくと応用が利くので、自分で動かしてみて理解を深めてみてください。

スポンサーリンク

スポンサーリンク

-文法・環境, 組み込み関数
-,