lambda式を使ったlistのsort。
公式的に覚えるのもアリですが、動作について解説します。
公式的に覚える
Pythonチュートリアルのサンプルコードを見てみます。
“数字”と”英語”のペアをタプルとするリストを、”数字”もしくは”英語”でソートします。
ソートの結果がわかりやすいように、順不同でpairsを作ります。
>>> pairs = [(3, 'three'), (2, 'two'), (4, 'four'), (1, 'one')]
# 数字でソート
>>> pairs.sort(key=lambda pair: pair[0])
>>> print(pairs)
[(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
# 英語でソート
>>> pairs.sort(key=lambda pair: pair[1])
>>> print(pairs)
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
公式的に覚えるのであれば、、、
タプルのindex:0の要素(数字)でソートしたい場合は、pair[0]
タプルのindex:1の要素(英語)でソートしたい場合は、pair[1]
pairは仮引数のなので、xと書いても、yと書いてもOKです。
ちゃんと動作を理解してみる
先ほどのソートを一般化して書いてみると、以下の通りになります。
list.sort(key=lambda 仮引数: 式)
中身の動作を一つずつ見ていきます。
- list
- 入れ子(ネスト)のリストなどの複合オブジェクト
- .sort(key=関数)
- sortはlistのメソッドなので、list.sort()と表記する
- keyはsortのオプション。keyは1つの引数を持つ関数を指定します。前述のlistから要素を取り出して、それを指定した関数の引数とします。
- lambda 仮引数: 式
- keyで取り出した要素を引数として、式を元にソートしたいキーワードを取り出します。
keyがどういった意味合いを持つのかを理解するのが、まさに鍵です。