sorted() 与 key 函数
对数字、字符串和元组排序
sorted() 与 key 函数 是 CoddyKit 上的免费 Competitive Programming Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Competitive Programming Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Competitive Programming Academy 课程共包含 4 节课。
排序让竞赛题迎刃而解
许多竞赛题只要将数据排列有序,就会变得简单。您的第一个工具是 sorted(),它会返回一个新的有序列表。🏆
sorted() 返回副本
调用 sorted(nums) 不会修改原列表,而是返回一个全新的有序列表。如果之后仍需要输入数据,这种方式非常合适。
nums = [3, 1, 2]
print(sorted(nums)) # [1, 2, 3]
print(nums) # [3, 1, 2]list.sort() 原地排序
如果您不需要保留原来的顺序,list.sort() 会原地排序并返回 None。对于大型数组,它可以节省内存。
nums = [3, 1, 2]
nums.sort()
print(nums) # [1, 2, 3]默认顺序为升序
默认情况下,Python 会从小到大进行排序。数字按从小到大的顺序排列,字符串则逐个字符按照字典序排列。
print(sorted(["pear", "apple", "kiwi"]))
# ['apple', 'kiwi', 'pear']使用 reverse 反向排序
传入 reverse=True,即可按从大到小的顺序排序。当贪心步骤需要先处理最大元素时,这非常实用。
print(sorted([3, 1, 2], reverse=True))
# [3, 2, 1]认识 key 函数
key 参数会告诉 sort 如何为每个元素确定顺序。Python 会对每个元素调用 key,并按照返回值进行排序。
words = ["bb", "a", "ccc"]
print(sorted(words, key=len))
# ['a', 'bb', 'ccc']使用 lambda 的 key
一个小巧的 lambda 可以让您直接在表达式中按任意条件排序。这里我们按照数字距离零的远近来排序。
vals = [-5, 2, -1, 3]
print(sorted(vals, key=lambda x: abs(x)))
# [-1, 2, 3, -5]按字段为对象排序
对于元组或记录,请将 key 指向重要的字段。对象的其余部分会自动随之保留。
people = [("Ann", 30), ("Bob", 25)]
print(sorted(people, key=lambda p: p[1]))
# [('Bob', 25), ('Ann', 30)]排序是稳定的
Python 的排序是稳定的:相同 key 会保持原有的相对顺序。这样您就可以分层排序,并安全地处理相同项。
key 优于手动比较
每个元素只计算一次 key,因此在大规模输入上仍然很快。请优先使用它,而不要自行交换元素。
排序复杂度为 O(n log n)
Python 排序的时间复杂度是 O(n log n)。当 n 达到几十万时,它通常也能轻松满足一秒的时间限制。
快速检查
您需要将列表排序,但必须保持原列表不变。
总结
您可以使用 sorted() 对数据排序,也可以原地 sort;使用 reverse 反转排序方向,还能用 key 为任何内容确定顺序。稳定排序会妥善处理相同项。🎉
常见问题解答
「sorted() 与 key 函数」课时是免费的吗?
是的 — 「sorted() 与 key 函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Competitive Programming Academy 课程的其余内容,请升级到 CoddyKit PRO。 Competitive Programming Academy 课程共包含 4 节课。
「sorted() 与 key 函数」这节课中我会学到什么?
对数字、字符串和元组排序 你通过在浏览器中直接运行的动手代码来练习 Competitive Programming Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Competitive Programming Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Competitive Programming Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「sorted() 与 key 函数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Competitive Programming Academy 课中编写并运行代码吗?
能。每节 Competitive Programming Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- sorted() 与 key 函数
- 按多个字段排序
- 使用 functools.cmp_to_key 实现自定义顺序
- 为什么先排序能解锁更多解法