2.11Python下关于列表的高级排序
Posted by 撒得一地 on 2016年1月23日 in python教程
如果希望元素能按照特定的方式进行排序(而不是sort函数默认的方式,即根据Python的默认排序规则按升序排列元素),那么可以通过compare(x,y)的形式自定义比较函数。compare(x,y)函数会在 x<y 时返回负数,在x>y 时返回正数,如果x=y则返回0(根据你的定义)。定义好该函数后,就可以提供给sort方法作为参数了。
内建函数cmp提供了比较函数的默认实现方式:
>>>cmp(10,8) >>1 >>>cmp(8,10) >>>-1 cmp(8,8) >>>0 >>>numbers = [5,2,9,7] >>>numbers.sort(cmp) >>>numbers [2,5,7,9]
这里要注意的是,上面的方法只适用于Python3.0以下,3.0以上去掉了cmp函数。
sort方法有另外两个可选的参数—key和reverse。如果要使用它们,那么就要通过名字来指定(这叫做关键字参数)。参数key和cmp类似,必须提供一个在排序过程中使用的函数。然而,该函数并不是直接用来确定对象的大小,而是为每个元素创建一个键,然后所有元素根据键来排序。因此,如果要根据元素的长度进行排序,那么可以
使用len作为键函数:
>>> x = ['abcd','afdfdf','a'] >>> x.sort(key=len) >>> x ['a', 'abcd', 'afdfdf']
另一个关键字参数reverse是简单的布尔值(True或False),用来指明列表是否要进行反向排序。
>>> x = [3,2,5,1,9] >>> x [3, 2, 5, 1, 9] >>> x.sort(reverse=True) >>> x [9, 5, 3, 2, 1]
cmp、key、reverse参数都可以用于sorted函数。在多数情况下,为cmp或key提供自定义函数是非常有用的。