python 系统学习笔记(十四)---排序

在 Python 中, 当需要对一个 list 排序时, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]).

其中:
cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数.
key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.
reverse 是一个布尔值, 表示是否反转比较结果.

1.cmp

我们希望按照自己定义的排序规则来排序(例如,按关键词的权重排序,按人的年龄排序,等等)。
若List中每个元素都是2-tuple,tuple中第一个元素为String类型的keyword,第二个元素为该字符串对应的权重(int类型),希望按照权重排序(从高到低),则可以这样:

def my_cmp(E1, E2):
    return -cmp(E1[1], E2[1])    #compare weight of each 2-tuple
                    #return the negative result of built-in cmp function
                    #thus we get the descend order
L = [('a', 11), ('b', 10), ('c', 12)]
L.sort(my_cmp)
print L

2.按照key 排序 这个会比cmp 执行次数少

def my_key(E1):

    return E1[1]  #return key 11,10,12

L = [('a', 11), ('b', 10), ('c', 12)]

L.sort(key=my_key,reverse=1) #key 大到小 reverse=0 时候从小到大

print L

3. itemgetter 返回 多排序

简单介绍itemgetter 

[python]  view plain copy
  1. from operator import itemgetter, attrgetter   
  2.   
  3. a = [1,2,3]      
  4.   
  5. b=itemgetter(1)      
  6.   
  7. print  b(a)      
  8.   
  9. b=itemgetter(1,0)      
  10.   
  11. print b(a)      
  12.   
  13. b=itemgetter(1)      
  14.   
  15. print  b(a)    
  16.   
  17. b=itemgetter(1,0)      
  18.   
  19. print b(a)   


  

按照key排序

[python]  view plain copy
  1. from operator import itemgetter, attrgetter  
  2.   
  3. L = [('a'11), ('b'10), ('c'12)]  
  4.   
  5. L.sort(key=itemgetter(1))  
  6.   
  7. print L  



按照key (1,2)排序 11 11 12为主 B A C 次要排序

[python]  view plain copy
  1. from operator import itemgetter, attrgetter  
  2.   
  3. L = [('a'11,'B'), ('b'11,'A'), ('c'12,'C')]  
  4.   
  5. L.sort(key=itemgetter(1,2))  
  6.   
  7. print L  



4 对由字典排序

[python]  view plain copy
  1. d = {'data1':3'data2':1'data3':2'data4':4}     
  2.   
  3. sorted(d.iteritems(), key=itemgetter(1), reverse=True)     
  4.   
  5. print d  


 

返回pair
[python]  view plain copy
  1. d = {'data1':3'data2':1'data3':2'data4':4}  
  2. a=sorted(d.iteritems(), key=itemgetter(1), reverse=True)  
  3. print a  


习题 

把1 和2 的内容用 lambda 实现
[python]  view plain copy
  1. #1.  
  2. L = [('a'11), ('b'10), ('c'12)]  
  3. L.sort(lambda elem1,elem2: cmp(elem1[1],elem2[1]))  
  4. print L  
  5. #2.  
  6. L = [('a'11), ('b'10), ('c'12)]  
  7. L.sort(key=lambda elem: elem[1])  
  8. print L  

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值