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])
Python