现在的位置: 首页 > 软件测试 > 测试技术 > 正文

python列表排序sort,sorted详解

2017年06月07日 测试技术 ⁄ 共 1458字 ⁄ 字号 评论关闭 ⁄ 阅读 193 次

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

函数原型分别如下:

1) sort(...)

L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

cmp(x, y) -> -1, 0, 1

2) sorted(...)

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表达式

示例代码如下:

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) #关联第二,第一关键字倒序排列

运行结果:

[('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)]

抱歉!评论已关闭.