nyanpyou Note

主な目的は調べたり作ったりしたプログラミング備忘録(予定)

学びのメモ:リストのソートとlambda式

リストの要素をソートしたい時は、組み込み関数のsort()もしくはsorted()を使うと良い。sort()は元のリストをそのまま並び替え、sorted()は元のリストのコピーを並び替える。
これらの関数にはKeyパラメータが存在し、比較を行う前にリストの各要素に対して呼び出される関数を指定できる。要は何を用いてソートするかを指定するためのもの。このkeyとlambda式を合わせて使うことで、リストの要素の特定のインデックスを使ってソートする等、自分の好みの条件でソートすることが出来る。

#例
list = [("a", 50), ("b", 20), ("c", 60), ("d", 30)]
sorted_list = sorted(list, key=lambda x:x[1])
print(sorted_list)
>>[('b', 20), ('d', 30), ('a', 50), ('c', 60)]

降順にしたい場合はkeyの後ろにreverse=Trueを指定する。
lambda式については以下を参考。

qiita.com

要は名前を付けずにその場で定義する関数で、上の例では与えられたタプルに対してインデックス[1]の値(50とか20とか)を返す関数をその場で作っていることになる。つまり以下のように書いても同様の動作をする。

#例2
def pickup(x):
    value = x[1]
    return value

list = [("a", 50), ("b", 20), ("c", 60), ("d", 30)]
sorted_list = sorted(list, key=pickup)
print(sorted_list)
>>[('b', 20), ('d', 30), ('a', 50), ('c', 60)]