List sort() 方法

描述

用来对列表进行排序,没有返回值,直接就地排序,如

list = [2,1,3]
list.sort()
print(list) # [1,2,3]

语法

list.sort(cmp=None, key=None, reverse=False)
  • cmp - 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
  • key - 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse - 排序规则,reverse = True 降序, reverse = False 升序,默认为升序排列。

关于可选参数 key 的说明和理解 key 参数本质上接收的是一个函数,表示” list 中的每一个元素都经过本函数”,并且这个经过这个函数得到的输出,才是最后真正要比较的对象。最后 list 会根据这些输出的对象的比较结果来对原始的 list 进行排序

根据上述说明,灵活使用key能够实现很多实用的功能:

  1. 指定位置的元素进行排序 当 list 中的每个元素含有多个元素的时候,如 list=[(1,3),(2,3),(8,0),(4,7)]。如果向依靠每个元素中的第一个元素大小对 list 中的每个元素进行排序,可以使用
    list=[(1,3),(2,3),(8,0),(3,7)]
    list.sort(key=lambda x: x[0])
    print(list) # [(1, 3), (2, 3), (3, 7), (8, 0)]
  2. 根据每个元素的其他特性、变换进行排序,如
    strings = ['foo', 'card', 'bar', 'aaaa', 'abab']
    strings.sort(key=lambda x: len(set(list(x))))
    print(strings) # ['aaaa', 'foo', 'abab', 'bar', 'card']
    本例中 key=lambda x: len(set(list(x)))。 对于每个 strings 中的元素,这个匿名函数的输出是”不重复的字母的数量”。因此,本例是通过 strings 中每个字符串的不重复字母的数量来进行排序的。
  3. 多关键字排序(有点特殊) 当 list 中的关键字很多时,我们可以按照 (1 中的说明,仅指定其中一个关键字进行排序。当想多关键字排序的时候,可以如下操作
     list = [('a', 2), ('c', 1), ('d', 4), ('b', 2)]
     list.sort(key = lambda x: (x[1], x[0]))
     print(list) # [('c', 1), ('a', 2), ('b', 2), ('d', 4)]
    上例中,先对 x[1] 进行排序,在对 x[0] 进行排序 而如果想对其中的某一个关键字降序排列(默认是升序,由 reverse 控制的),则可以通过添加负号(如果关键字不是数字,需要使用ord()函数求其ASCII码,不能直接添加负号),如
    list = [('a', 2), ('c', 1), ('d', 4), ('b', 2)]
    list.sort(key = lambda x: (x[1], -ord(x[0])))
    print(list) # [('c', 1), ('b', 2), ('a', 2), ('d', 4)]

返回值

其他注意

  1. 该排序是稳定的
  2. 参见同类型函数 sorted()