要素にリスト(あるいはタプル)を持つリストをソートすると、リスト内の各要素の値が順番に比較されます。 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): # 降順ソート