0Pricing
Coding Interview Prep · 课时

sorted() 与 key 函数

对数字、字符串和元组排序

sorted() 与 key 函数 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 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 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。

「sorted() 与 key 函数」这节课中我会学到什么?

对数字、字符串和元组排序 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Coding Interview Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Coding Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「sorted() 与 key 函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Coding Interview Prep 课中编写并运行代码吗?

能。每节 Coding Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. sorted() 与 key 函数
  2. 按多个字段排序
  3. 使用 functools.cmp_to_key 实现自定义顺序
  4. 为什么先排序能解锁更多解法
← 返回 Coding Interview Prep