WMX · 随记
·Python· 3 分钟阅读

排序 key:把业务顺序转换为可比较的键

成绩降序、姓名升序是一条组合规则。如果先把整份排序结果 reversed,同分名字也会被反转,违背预期。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Learn Python — Full Course for Beginners

Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Python 系列概览:输入校验、数据处理与行为验证
Python 系列概览:输入校验、数据处理与行为验证 点击图片查看大图 ↗

问题从哪里出现

成绩降序、姓名升序是一条组合规则。如果先把整份排序结果 reversed,同分名字也会被反转,违背预期。

理解核心机制

key 返回元组时按字段逐项比较。对数值取负可以表达单个字段的降序;Python 排序是稳定的,相同键保留原有相对次序。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。

Python5 行 · 可横向滚动
rows = [("Bo", 90), ("Ada", 90), ("Cy", 80)]
ordered = sorted(rows, key=lambda row: (-row[1], row[0]))
assert ordered == [("Ada", 90), ("Bo", 90), ("Cy", 80)]
print(ordered)
assert rows[0][0] == "Bo"

适用边界与常见误区

稳定排序不能保证来自不稳定数据源的结果每次一致。分页输出通常需要唯一 ID 作为最终排序键,还要明确缺失值和语言排序规则。

继续练习

加入同分同名但 ID 不同的两行,比较有无最终排序键时的确定性,并明确 sorted 与 list.sort 的返回差异。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档