Python: 2次元配列を特定の列で昇順・降順にソートする
Pythonで2次元配列(2次元リスト)を特定の列でソートする場合は、 リストのsortメソッドまたは組み込み関数のsorted()関数を使用します。
最初に結論を書いておきます。
2次元配列(2次元リスト)の2列目を降順でソートする場合、次のように記述します。
# sortメソッド 2次元配列.sort(reverse=True, key=lambda x:x[1]) # sorted関数 新たなリスト = sorted(2次元配列, reverse=True, key=lambda x:x[1])
reverseパラメータに「True」を指定すると降順になり、 「False」を指定すると昇順になります。 reverseパラメータを省略すると昇順でソートされます。
keyパラメータにはソートで使用されるキー値を返す関数を指定します。 関数を作ってもいいのですが、上のように無名関数(ラムダ式)を使った方が わかりやすくなります。
ソートのサンプルコード
sortメソッドとsortedメソッド両方の使い方を紹介します。 どちらも引数の指定方法は同じです。 元の2次元配列(2次元リスト)をソートして良い場合はsortメソッドを使い、 新たなリストを作成したい場合はsortedメソッドを使います。
sortメソッド
sortメソッドを使った2次元配列のサンプルコードを紹介します。
arr = [ [3, "b"], [1, "c"], [2, "a"]] # 降順 2列目 arr.sort(reverse=True, key=lambda x:x[1]) for a in arr: print(a)
実行結果を見ると2列目で降順にソートされていることがわかります。
実行結果
[1, 'c'] [3, 'b'] [2, 'a']
1列目・2列目で昇順・降順にソートする場合について紹介しておきます。
昇順の場合は「reverse=False」を省略してもかまいません。
# 昇順 1列目 arr.sort(reverse=False, key=lambda x:x[0]) # 降順 1列目 arr.sort(reverse=True, key=lambda x:x[0]) # 昇順 2列目 arr.sort(reverse=False, key=lambda x:x[1]) # 降順 2列目 arr.sort(reverse=True, key=lambda x:x[1])
sortedメソッド
sortedメソッドも引数の書き方は同じです。
arr = [ [3, "b"], [1, "c"], [2, "a"]] # 降順 2列目 new_arr = sorted(arr, reverse=True, key=lambda x:x[1]) for a in arr: print(a) for a in new_arr: print(a)
実行結果を見ると、元の2次元配列「arr」はそのままで、 新しい配列「new_all」の内容はソートされているのがわかります。
実行結果
[3, 'b'] [1, 'c'] [2, 'a'] 1 [1, 'c'] [3, 'b'] [2, 'a']
1列目・2列目で昇順・降順にソートする場合について紹介しておきます。
昇順の場合は「reverse=False」を省略してもかまいません。
# 昇順 1列目 new_arr = sorted(arr, reverse=False, key=lambda x:x[0]) # 降順 1列目 new_arr = sorted(arr, reverse=True, key=lambda x:x[0]) # 昇順 2列目 new_arr = sorted(arr, reverse=False, key=lambda x:x[1]) # 降順 2列目 new_arr = sorted(arr, reverse=True, key=lambda x:x[1])