16

重複の可能性:
sorted(key =lambda:)の背後にある構文

私はドキュメントを調べていて、この例に出くわしました:

> student_tuples = [
      ('john', 'A', 15),
      ('jane', 'B', 12),
      ('dave', 'B', 10), ]

> sorted(student_tuples, key=lambda student: student[2])  # sort by age 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

私が理解していないのは、ここでラムダと学生とは何ですか?他の名前に置き換えることはできますか?そして、何:をしstudent:student[2]ますか?これまで出会ったことがないので少し曖昧です。

4

2 に答える 2

36

意味的には、これは:

print sorted(student_tuples, key=lambda student: student[2])

これと同じです:

def sort_key(student):
    return student[2]

print sorted(student_tuples, key=sort_key)

lambda関数定義の代替構文を提供するだけです。結果は、によって作成されたものと同じような関数オブジェクトdefです。lambdaただし、新しい変数を定義するなど、関数では実行できないことがいくつかあります。これらは、このような小さな1回限りの関数を作成するのに適しています(誰に依頼するかによって異なります)。

それを理解したらkey、関数を受け入れ、に渡されたシーケンス内のすべての値でそれを呼び出しsorted、対応する値がそれ自体でソートされた場合の順序に従って値をソートすることだけを知っておく必要がありkeyます。

于 2012-10-09T02:11:32.427 に答える
3

lambda関数をインラインで定義する方法であり、コロンの前の部分:が関数のパラメーターです。この場合、それはと呼ばれstudentます。この例では、関数はリストの3番目の部分またはそれに渡されたタプル(年齢)を返すだけです。

于 2012-10-09T02:10:27.747 に答える