关于Python sorted()函数中lambda参数工作机制的技术问询
理解sorted()中lambda作为key的工作机制
我来给你掰扯清楚这个lambda在sorted里到底是怎么工作的~
首先得搞懂sorted()函数里的key参数到底是干啥的:当你给sorted()传了key参数时,它不会直接用列表里的元素来排序,而是会遍历列表里的每一个元素,把每个元素丢给key对应的函数处理,然后用这个函数返回的结果(也就是“排序键”)来决定元素的顺序。
那你看到的这个lambda student: student[2],其实就是个简化版的小函数,它等价于写一个正经的函数:
def get_sort_key(student): return student[2]
这里的student只是个参数名而已——你叫它x、item甚至aaa都没关系,它代表的就是sorted()正在处理的当前那个元组元素。
我们一步步拆解你给的例子的执行过程:
- 首先
sorted()拿到第一个元素('john', 'A', 15),把它传给lambda函数,lambda返回student[2]也就是15,这个15就是这个元素的排序键; - 接着处理第二个元素
('jane', 'B', 12),lambda返回12; - 最后处理第三个元素
('dave', 'B', 10),lambda返回10;
然后sorted()就根据这些键值10、12、15来排序对应的元素,自然就得到了按年龄从小到大排列的结果。
给你再举几个更直观的例子加深理解:
- 如果把lambda改成
lambda x: x[0],那就是按元组里第一个元素(名字)的字母顺序排序,结果会是:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] - 要是用自定义函数代替lambda,效果完全一样,比如按成绩排序:
def sort_by_grade(item): return item[1] sorted(student_tuples, key=sort_by_grade) # 结果:[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
内容的提问来源于stack exchange,提问作者Daniel Moisio
相关产品推荐
相关产品推荐

