sorted()

通常规定,对于两个元素x和y

  • x < y,则返回-1,
  • x == y,则返回0,
  • x > y,则返回1

这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

Higher-order

Python内置的sorted()函数就可以对list进行排序:

>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]

此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
    t[0].lower()
    return t

L2 = sorted(L, key=by_name)
def by_score(t):
    return t[1]

L2 = sorted(L, key=by_score)