编程学习网 > 编程语言 > Python > Python排序原来这么简单:一文搞懂 sorted、key 和高效排序技巧!
2026
03-31

Python排序原来这么简单:一文搞懂 sorted、key 和高效排序技巧!


Python 的排序设计非常优雅。很多语言把排序做成一堆复杂的接口,但 Python 的思路很简单:只提供两个核心工具,然后把扩展能力交给开发者。

最常见的排序方式其实只有两个。一个是 sorted(),它不会改变原始数据,而是返回一个新的列表;另一个是 list.sort(),它直接在原列表上排序。很多初学者不太注意这两者的区别,但在实际开发中差别很大。如果你还需要保留原始数据,就用 sorted();如果只是为了得到排序结果,并且不需要原列表,那么 list.sort() 会更高效一些。


Python 排序真正强大的地方在于 key 参数。很多语言的排序函数需要写复杂的比较函数,而 Python 只需要提供一个“提取关键值”的函数。排序算法会先计算每个元素的 key,然后根据 key 来排序。这样的设计不仅代码更简洁,而且性能更好,因为每个 key 只计算一次。

比如对字符串进行忽略大小写排序:


如果是复杂对象,也可以直接提取属性:


当排序逻辑只是“取某个字段”时,Python 甚至提供了更高效的工具。operator 模块中的 itemgetter 和 attrgetter 可以直接作为 key 使用,既简洁又更快。


我认为 Python 排序还有一个经常被忽略但非常重要的特性:排序是稳定的。稳定排序意味着,如果两个元素的排序 key 相同,它们在排序前后的相对顺序不会改变。这个特性在多字段排序时非常有用。比如先按年龄排序,再按姓名排序,只要顺序正确,最终结果会保持逻辑一致。

降序排序也非常简单,只需要增加一个参数:


还有一种情况是需要自定义复杂的比较逻辑,比如根据语言规则比较字符串。Python 本身已经不再直接支持 cmp 比较函数,但可以通过 functools.cmp_to_key() 把比较函数转换成 key。


Python 排序设计最值得学习的一点是它不仅考虑了“完整排序”,还考虑了“只需要部分结果”的情况。有时候我们并不需要把整个列表排序,只是想找出最大的几个元素。如果这时候仍然使用完整排序,其实是一种性能浪费。

Python 提供了 heapq 模块,可以非常高效地解决这种问题。


在很多真实场景中,比如排行榜、热门推荐、日志分析,往往只需要 Top N 的结果,这种方法会比完整排序更高效。

从整体设计来看,Python 的排序机制其实非常克制。核心接口很少,但扩展能力很强。key 函数解决了绝大多数排序需求,稳定排序保证了逻辑可靠,而像 heapq 这样的工具则让性能优化变得简单。

我一直觉得,一个好的语言设计往往不是功能越多越好,而是用尽可能少的工具解决尽可能多的问题。Python 的排序机制正是这种设计思想的一个典型例子。理解这些细节之后,再看日常代码中的排序操作,其实会发现很多写法都可以变得更优雅一些。

以上就是“Python排序原来这么简单:一文搞懂 sorted、key 和高效排序技巧!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取