studentには('john', 'A', 15)、('jane', 'B', 12)、('dave', 'B', 10)がそれぞれ引き渡されて
ここまではご認識のとおりです。
各タプルの3つ目の要素がkeyの引数として呼び出されているということでしょうか。
いいえ。keyになっているのはあくまでもラムダ式です。
keyを利用して、『各タプルの3つ目の要素』を取り出しています。
Python
1key = lambda student: student[2] # 関数オブジェクトの代入
2for s in student_tuples:
3 v = key(s)
4 print(f'比較するときは{v}を使います。')
実行結果 Wandbox
比較するときは15を使います。
比較するときは12を使います。
比較するときは10を使います。
補足1
ラムダ式を変数に束縛することはあまり好まれません。
上記のコードは説明の為の悪い例で、通常はこのように書きます。
Python
1def key(student):
2 return student[2]
...はい、これでも全く同じように取り扱えます。
慣れないうちはラムダ式を避け、関数定義を利用するのも一手でしょう。
補足2
リストやタプルなどの特定要素を取り出す機会は多いので、専用の関数が用意されています。
Python
1import operator
2
3func = operator.itemgetter(2)
4print(func(['a', 'b', 'c'])) # => c
次のうちどれを用いても、動作は全く同じです。
Python
1def func(student):
2 return student[2]
3
4sorted(student_tuples, key=func)
Python
1sorted(student_tuples, key=lambda student: student[2])
Python
1sorted(student_tuples, key=operator.itemgetter(2))
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/14 12:13
2020/06/14 12:35