まくまくPythonノート
二次元配列をソートする
2013-04-26

リストのリストをソートする

要素にリスト(あるいはタプル)を持つリストをソートすると、リスト内の各要素の値が順番に比較されます。 1 番目の要素の値が同じ場合、2 番目の要素の比較が行われます。

a = [[20, 'A'], [10, 'B'], [20, 'B'], [10, 'A']]

# 昇順ソート
a.sort()
print(a)  #=> [[10, 'A'], [10, 'B'], [20, 'A'], [20, 'B']]

# 降順ソート
a.sort(reverse=True)
print(a)  #=> [[20, 'B'], [20, 'A'], [10, 'B'], [10, 'A']]

どの要素で比較するかを指定してソートする

list.sort() メソッドの key パラメータを使用すると、比較に用いる値を指定することができます。 下記は、タプルを要素に持つリストをソートする例ですが、タプルの2番目の値を見てソートするように指定しています。

a = [('A', 2), ('B', 3), ('C', 1)]

# 昇順ソート
a.sort(key=lambda x: x[1])
print(a)  #=> [('C', 1), ('A', 2), ('B', 3)]

# 降順ソート
a.sort(key=lambda x: x[1], reverse=True)
print(a)  #=> [('B', 3), ('A', 2), ('C', 1)]

元のリスト (a) を書き換えたくない場合は、list.sort() メソッドの代わりに sorted() 関数を使用します。

b = sorted(a, key=lambda x: x[1]):  # 昇順ソート
b = sorted(a, key=lambda x: x[1], reverse=True):  # 降順ソート
2013-04-26