整理一下py的sort


對List進行排序,Python提供兩個方法
對給定的List L進行排序,
方法1.用List的成員函數sort進行排序
方法2.用built-in函數sorted進行排序(從2.4開始)
這兩種方法使用起來差很少,以第一種爲例進行講解:
從Python2.4開始,sort方法有了三個可選的參數
cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument:
"cmp=lambda x,y: cmp(x.lower(), y.lower())"(對比方法lambad表達式)

key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower"(排序關鍵字段,可用lambad表達式)
reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an(正反序列)
equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once.
如下是sort的具體實例。(一下標紅的 都是比較實用的 排序寫法)
實例1:
L = [2,3,1,4]
L.sort()
[1,2,3,4]
實例2:
>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>[4,3,2,1]
實例3:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>L.sort(cmp=lambda x,y:cmp(x[1],y[1]))
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
實例4:(最實用版)
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>L.sort(key=lambda x:x[1])
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
實例5:(下面兩個方法異類了 僅供參考)
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>import operator
>>>L.sort(key=operator.itemgetter(1))
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
實例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]
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
以上給出了6中對List排序的方法,其中實例3.4.5.6能起到對以List item中的某一項
爲比較關鍵字進行排序.
效率比較:
cmp < DSU < key
經過實驗比較,方法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是僅僅按照第二個關鍵字來排的,若是咱們想用第二個關鍵字
排過序後再用第一個關鍵字進行排序呢?有兩種方法
實例8:(雙排序,挺實用)
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>>[('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))
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
爲何實例8可以工做呢?緣由在於tuple是的比較從左到右之一比較的,比較完第一個,若是
相等,比較第二個
=======================================
>>>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'])ide

相關文章
相關標籤/搜索