Python3實(shí)現(xiàn)對(duì)列表按元組指定列進(jìn)行排序的方法分析
本文實(shí)例講述了Python3實(shí)現(xiàn)對(duì)列表按元組指定列進(jìn)行排序的方法。分享給大家供大家參考,具體如下:
Python版本: python3.+
運(yùn)行環(huán)境: Mac OS
IDE: pycharm
Python內(nèi)建的排序方法
1 排序方法介紹
Python中有2個(gè)排序函數(shù),一個(gè)是list內(nèi)置的sort()方法,另一個(gè)是全局的sorted()方法
sorted(iterable,key=None,reverse=False)
#返回排好序的新列表,不改變對(duì)象本身,默認(rèn)升序;reverse:-True降序 -False 正序?qū)λ锌傻膶?duì)象均有效
list.sort(key=None,reverse=False)
#將list自身進(jìn)行排序,不返回新的list對(duì)象,默認(rèn)升序;reverse:-True降序 -False 正序
2 基本的列表排序
1)list.sort()
排序
data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8] result = data.sort() print(data) #結(jié)果為 [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9] print(result) #結(jié)果為None
2)sorted()
排序
data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8] result = sorted(data) print(data) #結(jié)果為 [5, 7, 9, 3, -6, -7, -8, -9, 3, -8] print(result) #結(jié)果為 [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9]
3 以tuple作為list的元素
在默認(rèn)情況下sort和sorted函數(shù)接收的參數(shù)是元組時(shí),它將會(huì)先按元組的第一個(gè)元素進(jìn)行排序再按第二個(gè)元素進(jìn)行排序,再按第三個(gè)、第四個(gè)…依次排序。
我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)了解它,以下面這個(gè)list為例:
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
我們通過(guò)sorted()
對(duì)它進(jìn)行排序
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] result = sorted(data) print(data) #結(jié)果為 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] print(result) #結(jié)果為 [(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]
會(huì)發(fā)現(xiàn)排序后的結(jié)果中(0, 'B')在(0, 'a')的前面。這是因?yàn)樵诎丛M第一個(gè)元素排好之后,將(0, 'B'), (0, 'a')再按第二個(gè)元素進(jìn)行排序了,而'B'的ASCII編碼比'a'小,所以(0, 'B')就排在(0, 'a')的前面了。
那如何想要讓它排序時(shí)不分大小寫(xiě)呢?
這就要用到sort方法和sorted方法里的key參數(shù)了。
我們來(lái)看一下具體的實(shí)現(xiàn):
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] #利用參數(shù)key來(lái)規(guī)定排序的規(guī)則 result = sorted(data,key=lambda x:(x[0],x[1].lower())) print(data) #結(jié)果為 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] print(result) #結(jié)果為 [(0, 'a'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A')]
其中的lambda x:(x[0],x[1].lower()
可以理解為一個(gè)匿名函數(shù);
其功能類(lèi)似于:
def fun(x) return(x[0],x[1].lower())
如果想要以字母作為第一排序規(guī)則,并且字母大小寫(xiě)不敏感,該怎么實(shí)現(xiàn)?
這就能要運(yùn)用到之前所講到的
在默認(rèn)情況下sort和sorted函數(shù)接收的參數(shù)是元組時(shí),它將會(huì)先按元組的第一個(gè)元素進(jìn)行排序再按第二個(gè)元素進(jìn)行排序,再按第三個(gè)、第四個(gè)…依次排序。
再配合lambda返回一個(gè)自定義tuple;代碼如下:
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] #將x[1].lower()作為返回元組里的第一個(gè)元素,按照sorted的排序規(guī)律,就會(huì)先按字母排序,再按數(shù)字排序了 result = sorted(data,key=lambda x:(x[1].lower(),x[0])) print(data) #結(jié)果為 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] print(result) #結(jié)果為 [(0, 'a'), (1, 'A'), (2, 'A'), (0, 'B'), (1, 'B')]
4 [擴(kuò)展] 以dict作為list的元素
這個(gè)list里的元素是dict形式,每個(gè)dict都存有姓名和升高現(xiàn)在想要以升高進(jìn)行升序排列:
data = [{'name': '張三', 'height': 175}, {'name': '李四', 'height': 165}, {'name': '王五', 'height': 185}] #將x['height']最為返回tuple的第個(gè)一元素 result = sorted(data,key=lambda x:(x['height'],x['name'])) print(data) #結(jié)果為 print(result) #data 結(jié)果:[{'name': '張三', 'height': 175}, {'name': '李四', 'height': 165}, {'name': '王五', 'height': 185}] #result 結(jié)果:[{'name': '李四', 'height': 165}, {'name': '張三', 'height': 175}, {'name': '王五', 'height': 185}]
PS:這里再為大家推薦一款關(guān)于排序的演示工具供大家參考:
在線動(dòng)畫(huà)演示插入/選擇/冒泡/歸并/希爾/快速排序算法過(guò)程工具:
http://tools.jb51.net/aideddesign/paixu_ys
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python列表(list)操作技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- python中的元組與列表及元組的更改
- python中列表(list)和元組(tuple)的深入講解
- python 元組和列表的區(qū)別
- 簡(jiǎn)單了解python列表和元組的區(qū)別
- python中讀入二維csv格式的表格方法詳解(以元組/列表形式表示)
- python判斷變量是否為int、字符串、列表、元組、字典的方法詳解
- 在Python中字符串、列表、元組、字典之間的相互轉(zhuǎn)換
- Python 字符串、列表、元組的截取與切片操作示例
- Python 輸出時(shí)去掉列表元組外面的方括號(hào)與圓括號(hào)的方法
- Python中列表與元組的乘法操作示例
- python中的列表和元組實(shí)例詳解
相關(guān)文章
python+Word2Vec實(shí)現(xiàn)中文聊天機(jī)器人的示例代碼
本文主要介紹了python+Word2Vec實(shí)現(xiàn)中文聊天機(jī)器人,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03利用For循環(huán)遍歷Python字典的三種方法實(shí)例
字典由多個(gè)鍵和其對(duì)應(yīng)的值構(gòu)成的鍵—值對(duì)組成,鍵和值中間以冒號(hào):隔開(kāi),項(xiàng)之間用逗號(hào)隔開(kāi),整個(gè)字典是由大括號(hào){}括起來(lái)的,下面這篇文章主要給大家介紹了關(guān)于如何利用For循環(huán)遍歷Python字典的三種方法,需要的朋友可以參考下2022-03-03python 獲取頁(yè)面表格數(shù)據(jù)存放到csv中的方法
今天小編就為大家分享一篇python 獲取頁(yè)面表格數(shù)據(jù)存放到csv中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12利用python進(jìn)行接口測(cè)試及類(lèi)型介紹
這篇文章主要介紹了利用python進(jìn)行接口測(cè)試詳情,文章基于python展開(kāi)對(duì)接口測(cè)試的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05Python實(shí)現(xiàn)簡(jiǎn)易五子棋游戲
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)易五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問(wèn)題
這篇文章主要介紹了聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Python實(shí)現(xiàn)操縱控制windows注冊(cè)表的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)操縱控制windows注冊(cè)表的方法,結(jié)合實(shí)例形式分析了Python使用_winreg模塊以及win32api模塊針對(duì)Windows注冊(cè)表操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05