我不清楚以下内容是如何工作的:
In [1]: student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
In [2]: sorted(student_tuples, key=lambda student: student[2])
Out [2]: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] # sort by age
Run Code Online (Sandbox Code Playgroud)
但,
In [3]: st = lambda student: student[2]
In [4]: st(student_tuples)
Out [4]: ('dave', 'B', 10)
Run Code Online (Sandbox Code Playgroud)
为什么[2]前一个示例中的 指的是各个元组的索引,而在 lambda 函数中它返回列表中的第二个元组?
因为当您排序时,对于要排序的列表中的每个元素都会调用一次 key 函数。这就是为什么它lambda student:不是lambda student_tuples:(参数的命名不会改变任何东西,只是解释命名选择)。
您可以通过打印关键函数的参数直接看到这一点:
student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
def my_key(student):
print(student)
return student[2]
sorted(student_tuples, key=my_key)
# calls to my_key print:
# ('john', 'A', 15)
# ('jane', 'B', 12)
# ('dave', 'B', 10)
my_key(student_tuples)
# prints (not returns):
# [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
Run Code Online (Sandbox Code Playgroud)