先写你希望看到的次序
虚构记录为(B,80)、(A,80)、(C,90)。要求分数降序、同分姓名升序,目标顺序C、A、B。先在纸上写目标,防止实现出来什么就接受什么。
如果按(score,name)排序再整体reverse,姓名也会降序,80分中的B会排在A前面。reverse影响的是整个排序关系,不只影响第一个字段。
将字段方向编码进key
分数是普通数值时,可用key=lambda row: (-row[1], row[0])。负分数让高分排前,姓名仍按默认升序。若数据结构是字典,对应改用字段名。
Python排序是稳定的,同一key的记录保留原有相对顺序。也可以先按次要键升序,再稳定地按主要键降序;先次要后主要,顺序不能随意交换。
区分新列表与原地改变
sorted(records, key=...)返回新列表;records.sort(key=...)修改原列表并返回None。写records=records.sort(...)会把名字绑定到None,并不是得到排序结果。
自练加入两个同名同分但ID不同的记录,检查相对顺序;再加入缺失分数,先规定缺失值排哪里再设计key。大学编程辅导中,能解释需求和边界,比记住一行写法更有用。
参考资料
下一步
如需大学专业课程与 Tutorial 学习支持,请填写模块名称、学习目标和已尝试步骤。具体教学安排须确认,计分作业由学生独立完成。
