python: sort a list

在很多的文本统计需求中需要对List进行排序,Python提供了两个方法
对给定的List L进行排序,
方法1.用List的成员函数sort进行排序
方法2.用built-in函数sorted进行排序 


A: List.sort的具体实例
实例1:
>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]
实例2:

>>> L.sort(reverse = True)  
>>> L
['d', 'c', 'b', 'a']

实例3:

>>> L=['a','c',2,'b','1','d']  
>>> L.sort()
>>> L
[2, '1', 'a', 'b', 'c', 'd']

>>> L.sort(key=str)
>>> L
['1', 2, 'a', 'b', 'c', 'd']

>>> L1=['12','1','34',1]
>>> L1.sort()
>>> L1
[1, '1', '12', '34']
>>> L1=['12','1','34',2]
>>> L1.sort()
>>> L1
[2, '1', '12', '34']
>>> L1.sort(key=int)###相当于对每一个数进行int(*)之后再进行比较
>>> L1
['1', 2, '12', '34']


实例4:
>>> L.sort( key = lambda x : x[0])  ###利用内置的lamda函数比较第一列或者第二列 ,
>>> L
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> L = [('b',5),('a',1),('c',3),('d',4)] 
>>> L.sort( key = lambda x : x[0] )
>>> L
[('a', 1), ('b', 5), ('c', 3), ('d', 4)]
>>> L.sort( key = lambda x:x[1]) 
>>> L
[('a', 1), ('c', 3), ('d', 4), ('b', 5)]

实例5: ##cmp 可以自定义比较函数,下面例子也是利用内置的lamda函数展开

>>> L = [('b',5),('a',1),('c',3),('d',4)]
>>> L.sort(cmp=lambda x,y:cmp(x[1],y[1]))
>>> L

[('a', 1), ('c', 3), ('d', 4), ('b', 5)]



实例6:(DSU方法:Decorate-Sort-Undercorate)
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
>>>A.sort()
>>>L = [s[2] for s in A]
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]


cmp < DSU < key(python中实现这三个排序用的底层排序方法不同

通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当
多关键字比较排序:
实例7:

>>>L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]
我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字
排过序后再用第一个关键字进行排序呢?有两种方法(当然也可以直接调用两次sort)
实例8:#operator.itemgetter operator模块提供的itemgetter函数用于获取对象的哪些维的数据
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
实例9:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=operator.itemgetter(1,0))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

####字典相关 
>>>L = [{"type": 0, "name": "hhhh", "size": 2}, {"type": 1, "name": "uuuu", "size": 12341234}, {"type": 1, "name": "kkkk", "size": 234}]
>>>L.sort(key=operator.itemgetter('type'))

>>>L.sort(key=lambda x:x['type'])

B:sorted 方法

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list (返回list) 

首先看看python中的iterable:迭代器

实例1:对list排序

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])
实例2:对字典排序
>>> d = {'data1':3, 'data2':1, 'data3':2, 'data4':4} 
>>> sorted(d)
['data1', 'data2', 'data3', 'data4']
>>> sorted(d.iteritems(),key=lambda x:x[1])          
[('data2', 1), ('data3', 2), ('data1', 3), ('data4', 4)] 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值