大爱

Python列表排序sort,sorted详解

2017-06-07

python2.7中提供了两种方法对list进行排序,分别是list成员函数sort及built-in函数sorted.

函数原型分别如下:

1) sort(…)

1
2
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1

2) sorted(…)

1
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

2个函数参数及功能基本一致,唯一的区别是sort是在原有list上修改排序,sorted则是排序生成新的列表。

以sorted函数为例,参数详解如下:

1)iterable:能够一次返回它的一个成员的对象。iterable主要包括3类:

  • 第一类是所有的序列类型,比如list(列表)、str(字符串)、tuple(元组)。

  • 第二类是一些非序列类型,比如dict(字典)、file(文件)。

  • 第三类是你定义的任何包含iter()或getitem()方法的类的对象。

2)cmp:比较函数,这个函数接收两个参数(iterable的元素)

  • 如果第一个参数小于第二个参数,返回一个负数;

  • 如果第一个参数等于第二个参数,返回零;

  • 如果第一个参数大于第二个参数,返回一个正数。默认值为None。

3)key:指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。

4)reverse:是一个布尔值。如果设置为True,列表元素将被降序排列,默认为升序排列。

5)返回值:是一个经过排序的可迭代类型,与iterable一样。

注1:key和reverse比一个等价的cmp函数处理速度要快。这是因为对于每个列表元素,cmp都会被调用多次,而key和reverse只被调用一次。

注2:cmp和key可以使用lambda表达式

示例代码如下:

1
2
3
4
5
6
7
L=[('a',4),('a',1),('c',3),('d',3)]
print sorted(L,cmp=lambda i,j:cmp(i[0],j[0]),reverse=True) #按第一个关键字倒序排列
print sorted(L,cmp=lambda i,j:cmp(i[1],j[1]),reverse=True) #按第二关键字倒序排列
print sorted(L,key=lambda i:(i[0]),reverse=True) #按第一个关键字倒序排列
print sorted(L,key=lambda i:(i[1]),reverse=True) #按第二关键字倒序排列
print sorted(L,key=lambda i:(i[0],i[1]),reverse=True) #关联第一,第二关键字倒序排列
print sorted(L,key=lambda i:(i[1],i[0]),reverse=True) #关联第二,第一关键字倒序排列

运行结果

1
2
3
4
5
6
[('d', 3), ('c', 3), ('a', 4), ('a', 1)]
[('a', 4), ('c', 3), ('d', 3), ('a', 1)]
[('d', 3), ('c', 3), ('a', 4), ('a', 1)]
[('a', 4), ('c', 3), ('d', 3), ('a', 1)]
[('d', 3), ('c', 3), ('a', 4), ('a', 1)]
[('a', 4), ('d', 3), ('c', 3), ('a', 1)]
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章