Python 排序指南
摘自原文https://docs.python.org/zh-cn/3.9/howto/sorting.html
作者
Andrew Dalke 和 Raymond Hettinger
发布版本
0.1
Python 列表有一个内置的 list.sort() 方法可以直接修改列表。还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表。
在本文档中,我们将探索使用Python对数据进行排序的各种技术。
基本排序
简单的升序排序非常简单:只需调用 sorted() 函数即可。它会返回一个新的已排序列表。
sorted([5, 2, 3, 1, 4])
你也可以使用 list.sort() 方法,它会直接修改原列表(并返回 None 以避免混淆),通常来说它不如 sorted() 方便 ——— 但如果你不需要原列表,它会更有效率。
a = [5, 2, 3, 1, 4]
a.sort()
a
另外一个区别是, list.sort() 方法只是为列表定义的,而 sorted() 函数可以接受任何可迭代对象。
sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
关键函数
list.sort() 和 sorted() 都有一个 key 形参用来指定在进行比较前要在每个列表元素上调用的函数(或其他可调用对象)。
例如,下面是一个不区分大小写的字符串比较:
sorted("This is a test string from Andrew".split(), key=str.lower)
key 形参的值应该是个函数(或其他可调用对象),它接受一个参数并返回一个用于排序的键。 这种机制速度很快,因为对于每个输入记录只会调用一次键函数。
一种常见的模式是使用对象的一些索引作为键对复杂对象进行排序。例如:
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
sorted(student_tuples, key=lambda student: student[2]) # sort by age
同样的技术也适用于具有命