學習python -- 第021天 list的幾種排序
阿新 • • 發佈:2021-08-30
對List進行排序,Python提供了兩個方法
方法1.用List的內建函式list.sort進行排序
list.sort(func=None, key=None, reverse=False)
Python例項:
1 2 3 4 5 6 |
>>> list = [ 2 , 5 , 8 , 9 , 3 ]
>>> list
[ 2 , 5 , 8 , 9 , 3 ]
>>> list .sort()
>>> list
[ 2 , 3 , 5 , 8 , 9 ]
|
方法2.用序列型別函式sorted(list)進行排序(從2.4開始)
Python例項:
1 2 3 4 5 |
>>> list = [ 2 , 5 , 8 , 9 , 3 ]
>>> list
[ 2 , 5 , 8 , 9 , 3 ]
>>> sorted ( list )
[ 2 , 3 , 5 , 8 , 9 ]
|
兩種方法的區別:
sorted(list)返回一個物件,可以用作表示式。原來的list不變,生成一個新的排好序的list物件。
list.sort() 不會返回物件,改變原有的list。
其他sort的例項:
例項1:正向排序
1 2 3 4 |
>>>L = [ 2 , 3 , 1 , 4 ]
>>>L.sort()
>>>L
>>>[ 1 , 2 , 3 , 4 ]
|
例項2:反向排序
1 2 3 4 |
>>>L = [ 2 , 3 , 1 , 4 ]
>>>L.sort(reverse = True )
>>>L
>>>[ 4 , 3 , 2 , 1 ]
|
例項3:對第二個關鍵字排序
1 2 3 4 |
>>>L = [( 'b' , 6 ),( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 )]
>>>L.sort( lambda x,y: cmp (x[ 1 ],y[ 1 ]))
>>>L
>>>[( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 ),( 'b' , 6 )]
|
例項4: 對第二個關鍵字排序
1 2 3 4 |
>>>L = [( 'b' , 6 ),( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 )]
>>>L.sort(key = lambda x:x[ 1 ])
>>>L
>>>[( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 ),( 'b' , 6 )]
|
例項5: 對第二個關鍵字排序
1 2 3 4 5 |
>>>L = [( 'b' , 2 ),( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 )]
>>> import operator
>>>L.sort(key = operator.itemgetter( 1 ))
>>>L
>>>[( 'a' , 1 ),( 'b' , 2 ),( 'c' , 3 ),( 'd' , 4 )]
|
例項6:(DSU方法:Decorate-Sort-Undercorate)
1 2 3 4 5 6 |
>>>L = [( 'b' , 2 ),( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 )]
>>>A = [(x[ 1 ],i,x) for i,x in enumerate (L)] #icanconfirmthestablesort
>>>A.sort()
>>>L = [s[ 2 ] for s in A]
>>>L
>>>[( '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:
1 2 3 4 |
>>>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:
1 2 3 4 |
>>>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:
1 2 3 4 |
>>>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 )]
|
為什麼例項8能夠工作呢?原因在於tuple是的比較從左到右比較的,比較完第一個,如果相等,比較第二個
認清現實,放棄幻想。 細節決定成敗,心態放好,認真學習與工作。