python列表排序sorted_Python列表排序sort,sorted详解

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

函数原型分别如下:

1) sort(…)

1

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

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

2) sorted(…)

1sorted(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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值