python list排序的兩種方法及實(shí)例講解
對(duì)List進(jìn)行排序,Python提供了兩個(gè)方法
方法1.用List的內(nèi)建函數(shù)list.sort進(jìn)行排序
list.sort(func=None, key=None, reverse=False)
Python實(shí)例:
>>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> list.sort() >>> list [2, 3, 5, 8, 9]
方法2.用序列類型函數(shù)sorted(list)進(jìn)行排序(從2.4開(kāi)始)
Python實(shí)例:
>>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> sorted(list) [2, 3, 5, 8, 9]
兩種方法的區(qū)別:
sorted(list)返回一個(gè)對(duì)象,可以用作表達(dá)式。原來(lái)的list不變,生成一個(gè)新的排好序的list對(duì)象。
list.sort() 不會(huì)返回對(duì)象,改變?cè)械膌ist。
其他sort的實(shí)例:
實(shí)例1:正向排序
>>>L = [2,3,1,4] >>>L.sort() >>>L >>>[1,2,3,4]
實(shí)例2:反向排序
>>>L = [2,3,1,4] >>>L.sort(reverse=True) >>>L >>>[4,3,2,1]
實(shí)例3:對(duì)第二個(gè)關(guān)鍵字排序
>>>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)]
實(shí)例4: 對(duì)第二個(gè)關(guān)鍵字排序
>>>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)]
實(shí)例5: 對(duì)第二個(gè)關(guān)鍵字排序
>>>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)]
實(shí)例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)]
以上給出了6中對(duì)List排序的方法,其中實(shí)例3.4.5.6能起到對(duì)以List item中的某一項(xiàng)
為比較關(guān)鍵字進(jìn)行排序.
效率比較:
cmp < DSU < key
通過(guò)實(shí)驗(yàn)比較,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相當(dāng)
多關(guān)鍵字比較排序:
實(shí)例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)]
我們看到,此時(shí)排序過(guò)的L是僅僅按照第二個(gè)關(guān)鍵字來(lái)排的,
如果我們想用第二個(gè)關(guān)鍵字排過(guò)序后再用第一個(gè)關(guān)鍵字進(jìn)行排序呢?有兩種方法
實(shí)例8:
>>> 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)]
實(shí)例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)]
為什么實(shí)例8能夠工作呢?原因在于tuple是的比較從左到右比較的,比較完第一個(gè),如果相等,比較第二個(gè)
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
python Protobuf定義消息類型知識(shí)點(diǎn)講解
在本篇文章里小編給大家整理的是一篇關(guān)于python Protobuf定義消息類型知識(shí)點(diǎn)講解,有興趣的朋友們可以學(xué)習(xí)下。2021-03-03淺談pytorch卷積核大小的設(shè)置對(duì)全連接神經(jīng)元的影響
今天小編就為大家分享一篇淺談pytorch卷積核大小的設(shè)置對(duì)全連接神經(jīng)元的影響,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python請(qǐng)求域名requests.(url = 地址)報(bào)錯(cuò)
本文主要介紹了python請(qǐng)求域名requests.(url = 地址)報(bào)錯(cuò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python類中__init__()?和self的詳細(xì)解析
self和__init__的語(yǔ)法學(xué)過(guò)Python的都清楚,但是靠死記硬背來(lái)迫使自己理解并不是個(gè)好辦法,下面這篇文章主要給大家介紹了關(guān)于Python類中__init__()?和self的相關(guān)資料,需要的朋友可以參考下2022-12-12python實(shí)現(xiàn)倒計(jì)時(shí)的示例
這篇文章主要介紹了python實(shí)現(xiàn)的倒計(jì)時(shí)的示例,需要的朋友可以參考下2014-02-02安裝python3.7編譯器后如何正確安裝opnecv的方法詳解
這篇文章主要介紹了安裝python3.7編譯器后如何正確安裝opnecv,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06在Python中利用Into包整潔地進(jìn)行數(shù)據(jù)遷移的教程
這篇文章主要介紹了在Python中如何利用Into包整潔地進(jìn)行數(shù)據(jù)遷移,在數(shù)據(jù)格式的任意兩個(gè)格式之間高效地遷移數(shù)據(jù),需要的朋友可以參考下2015-03-03python break和continue用法對(duì)比
在本篇文章里小編給大家整理的是一篇關(guān)于python break和continue用法對(duì)比內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-06-06