0

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提供自定义函数是非常有用的。

标签:

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

9 + 8 = ?

网站地图|XML地图

Copyright © 2015-2018 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.