Python 的列表排序

在 Python 中, 当需要对一个 list 排序时, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]).

cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数.

key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.

reverse 是一个布尔值, 表示是否反转比较结果.

  • 通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次.
    也就是说, 同等情况下, 写 key 函数比写 cmp 函数要高效很多.
    students=[{'name':'dave','age':15},{'name':'fengtao','age':16},{'name':'maomao','age':10}]

    正序

    students=sorted(students, key=lambda student: student['age'])

    倒序

    students=sorted(students,key=lambda student:student['age'],reverse=True)
  • 用 operator 函数来加快速度, 上面两个排序等价于:

    from operator import itemgetter, attrgetter
    sorted(students, key=itemgetter(2))
    sorted(students, key=attrgetter('age'))

  • 用 operator 函数进行多级排序, 这个就是比较复杂的应用. 按我以前的理解, 是一定要写个定制的 cmp 函数的. 现在看来, 以前真的够笨.

你可能感兴趣的:(Python 的列表排序)