Python排序中key函数的Lambda索引疑问:为何表现不同?
为什么lambda在
sorted里和直接调用时的索引行为不一样? 嘿,这个疑惑的核心其实是搞懂**sorted函数对key参数的处理逻辑**——它和你直接调用lambda时传的参数完全不同!
先拆解两种场景的差异:
1. 在sorted中使用lambda的逻辑
当你执行:
sorted(student_tuples, key=lambda student: student[2])
sorted函数会做这些事:
- 遍历
student_tuples里的每一个元素(也就是每个小元组:('john', 'A', 15)、('jane', 'B', 12)、('dave', 'B', 10)) - 把每个单独的元组作为参数,传给lambda里的
student变量 - 此时
student是单个元组,student[2]自然就是取这个元组的第3个元素(也就是年龄) - 最后
sorted收集所有年龄值,以此为依据对原列表排序,得到按年龄从小到大的结果
2. 直接调用lambda的逻辑
当你执行:
st = lambda student: student[2] st(student_tuples)
这里你是把**整个列表student_tuples**直接传给了lambda的student变量。此时student代表的是整个列表,而不是单个元组,所以student[2]就是取列表的第3个元素(也就是('dave', 'B', 10)),这就是你看到这个输出的原因。
直观模拟验证
你可以手动模拟sorted的遍历过程,就能清楚看到差异:
student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] st = lambda student: student[2] # 模拟sorted逐个传入元素的行为 for single_student in student_tuples: print(st(single_student)) # 会依次输出 15、12、10
简单来说:sorted帮你把列表拆成单个元素传给lambda,而你直接调用时传了整个列表,这就是索引行为不同的根本原因~
内容的提问来源于stack exchange,提问作者P. Prunesquallor
相关产品推荐
相关产品推荐

