Python: 2次元配列を特定の列で昇順・降順にソートする

Pythonで2次元配列(2次元リスト)をソートする場合は、 リストのsortメソッドまたは組み込み関数のsorted関数を使用します。

結論から書くと、次のように記述します。


# sortメソッド
2次元配列.sort(reverse=True, key=lambda x:x[1])

# sorted関数
新たなリスト = sorted(2次元配列, reverse=True, key=lambda x:x[1])

上のコードは、2次元配列の2列目を降順でソートしています。

メソッドのkey引数にラムダ式を使用すると簡単に特定の列でソート可能です。 デフォルトでは昇順でソートしますがreverse引数にFalseを指定することで 降順でソートできます。

ソートのサンプルコード

sortメソッドとsortedメソッド両方のやり方を紹介します。 どちらも引数の指定方法は同じです。 元の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