Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2445324
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: Python/Ruby

2014-05-16 23:55:37

类似其他语言,Python内置有排序方法,sort和sorted。二者功能类似,都可以通过参数(cmp=None, key=None, reverse=False)实现方便并且可定制的排序,主要区别就是sort是原地排序,而sorted会返回一个新的列表。
1. sort是list的成员函数,对调用其的对象内容元素进行原地排序,排序后的对象发生了变化,所以元组(tuple)是不能调用这个方法的。
   函数原型: L.sort(cmp=None, key=None, reverse=False)
2. sorted是python内置的方法,它会对传入的序列(所以元祖可以通过这种方式排序)进行排序,并生成一个新的列表。
   函数原型: sorted(sequence, cmp=None, key=None, reverse=False)

参数解析


sequence参数(sorted方式)

待排序数据,可以是列表或者是元组(list or tuple)

cmp参数

cmp接受一个函数,拿整形举例,形式为:
def f(a,b):
     return a-b
如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了

key参数

 key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下
def f(a):
     return len(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序

reverse参数

接受False 或者True 表示是否逆序

示例


使用内置函数

按列表的元素的长度排序 
c =['CCC', 'bb', 'ffff', 'z']  
sorted(c,key=len)

将列表中的每个元素变为小写,再按每个元素中的每个字母的ascii码从小到大排序 
d =['CCC', 'bb', 'ffff', 'z'] 
sorted(d,key = str.lower )

使用自定义函数

按照元素长度排序
L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f(x):
    return len(x)
sort(key=f)
print L
输出:
[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]

按照每个字典元素里面key为1的元素的值排序
L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f2(a,b):
    return a[1]-b[1]
L.sort(cmp=f2)
print L

按列表e中每个元素的最后一个字母排序
def lastchar(s): 
   return s[-1] 
e = ['abc','b','AAz','ef'] 
sorted(e,key = lastchar)      

使用lambda函数

用key函数排序
>>> sorted(students, key=lambda student : student[2])   # sort by age  
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]  

用cmp函数排序 
>>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) # sort by age  
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]  
阅读(2782) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~