Python中sorted函数的key参数语法为何如此复杂?
关于Python sorted函数key参数的疑问解答
先明确核心逻辑:sorted函数的key参数要求传入可调用对象(比如函数、lambda表达式),这个对象会被用来遍历处理目标序列里的每一个元素,返回一个“排序依据值”,sorted最终会根据这些值对原元素进行排序。
1. ages和ages[2]分别指代什么?
ages是lambda表达式的参数名,你可以换成任意合法变量名(比如student),它代表sorted遍历students时取出的单个元组元素。比如第一次遍历拿到("Squidward", "F", 60),第二次拿到("Sandy", "A", 33),以此类推。ages[2]是取这个元组的第3个元素(Python索引从0开始计数),也就是每个学生的年龄数值。对应上面的元组,ages[2]会依次返回60、33、36这些值。
2. Python如何识别到引用的是元组的索引?
因为students里的每个元素都是元组,而元组属于Python的序列类型,[索引]是序列类型的基础取值语法——只要变量指向的是序列(元组、列表等),Python就能通过索引访问其内部元素,这是语言本身的语法规则。
3. 为什么key=age能生效,直接写key=2不行?
sorted的key参数必须是可调用对象(能被()执行的东西),而不是固定值:
- 传
key=age时,age是lambda函数的引用,sorted会自动把每个学生元组传给这个lambda,拿到返回的年龄值,再用这些年龄值作为排序依据对原元组排序。 - 如果你直接传
key=2,2是一个整数,不属于可调用对象,Python无法用它去处理每个学生元组,因此会抛出错误。
补充:简化写法
你可以不用单独定义age变量,直接把lambda表达式写在key参数里,效果完全一致:
sorted_students = sorted(students, key=lambda x: x[2])
内容的提问来源于stack exchange,提问作者pjk
相关产品推荐
相关产品推荐

