Python序列排序的具體場景實(shí)現(xiàn)
python中,一般在涉及到列表排序時,都用內(nèi)置的sort()方法或者全局的sorted()方法,區(qū)別如下:
1、sort()方法只能用于列表排序,不能用于字符串,字典等其他可迭代序列;sorted()方法可以用于所有的可迭代序列;
2、sort()方法是在原列表基礎(chǔ)上進(jìn)行排序,返回None,會破壞原始列表結(jié)構(gòu);sorted()方法是返回一個排序后的新序列,對原始列表無影響;
#sort()排序 >>> a=[6,9,8,4,3,1,2] >>> b=a.sort() >>> print(b) None >>> print(a) [1, 2, 3, 4, 6, 8, 9] #sorted()排序 >>> a=[6,9,8,4,3,1,2] >>> b=sorted(a) >>> print(b) [1, 2, 3, 4, 6, 8, 9] >>> print(a) [6, 9, 8, 4, 3, 1, 2]
字典排序時,sorted()方法默認(rèn)是按照字典的鍵(key)排序的,如下:
>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'} >>> b=sorted(a) >>> print(b) [1, 2, 3, 4, 5]
如果需要按照字典的value排序,可以用下面的方法:
>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'} >>> b=sorted(a.items(), key=lambda item:item[1]) >>> print(b) [(5, 'A'), (4, 'B'), (3, 'C'), (2, 'D'), (1, 'E')]
高級用法
sort()方法和sorted()方法都可以指定參數(shù)來處理一些復(fù)雜場景的排序
1、key參數(shù):指定一個函數(shù),可以是內(nèi)置函數(shù),也可以是自己定義的函數(shù),此函數(shù)將在每個元素比較前被調(diào)用。
2、reverse參數(shù):此參數(shù)指定True or False,來進(jìn)行降序或者升序,默認(rèn)為False(升序)。
如下:
a = ["This", "A", "is", "bag"] b = sorted(a, key=str.lower) c = sorted(a, key=str.lower, reverse=True) print(b) print(c) ['A', 'bag', 'is', 'This'] ['This', 'is', 'bag', 'A']
更廣泛的使用情況是用復(fù)雜對象的某些值來對復(fù)雜對象的序列排序,例如:
一個列表保存著每個學(xué)生的姓名,檔次和分?jǐn)?shù)
#學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:531509025 student_tuples = [ ('john', 'A', 96), ('leky', 'D', 63), ('andy', 'A', 92), ('jane', 'B', 82), ('dave', 'B', 85), ('cany', 'A', 96) ]
場景1、按檔次從高到低進(jìn)行排序
student_tuples = [ ('john', 'A', 96), ('leky', 'D', 63), ('andy', 'A', 92), ('jane', 'B', 82), ('dave', 'B', 85), ('cany', 'A', 96) ] print(sorted(student_tuples, key=lambda student: student[1])) [('john', 'A', 96), ('andy', 'A', 92), ('cany', 'A', 96), ('jane', 'B', 82), ('dave', 'B', 85), ('leky', 'D', 63)]
場景2、按分?jǐn)?shù)從高到低排序
方法(1)、使用reverse參數(shù)
student_tuples = [ ('john', 'A', 96), ('leky', 'D', 63), ('andy', 'A', 92), ('jane', 'B', 82), ('dave', 'B', 85), ('cany', 'A', 96), ] print(sorted(student_tuples, key=lambda student: student[2], reverse=True)) [('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]
方法(2)、使用負(fù)號(-)
student_tuples = [ ('john', 'A', 96), ('leky', 'D', 63), ('andy', 'A', 92), ('jane', 'B', 82), ('dave', 'B', 85), ('cany', 'A', 96), ] print(sorted(student_tuples, key=lambda student: -student[2])) [('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]
注意:負(fù)號(-)只能用于數(shù)字前面,不能用于字符串前面
場景3、按檔次從高到低進(jìn)行排序,檔次相同的按分?jǐn)?shù)從高到底排序
student_tuples = [ ('john', 'A', 96), ('leky', 'D', 63), ('andy', 'A', 92), ('jane', 'B', 82), ('dave', 'B', 85), ('cany', 'A', 96) ] print(sorted(student_tuples, key=lambda student: [student[1], -student[2]])) [('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]
場景4、按檔次從低到高進(jìn)行排序,檔次相同的按分?jǐn)?shù)從低到高排序
student_tuples = [ ('john', 'A', 96), ('leky', 'D', 63), ('andy', 'A', 92), ('jane', 'B', 82), ('dave', 'B', 85), ('cany', 'A', 96) ] print(sorted(student_tuples, key=lambda student: [student[1], -student[2]],reverse=True)) [('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('john', 'A', 96), ('cany', 'A', 96)]
場景5、按檔次從低到高進(jìn)行排序,檔次相同的按分?jǐn)?shù)從低到高排序,最后再按照姓名升序
姓名是字符串,不能在字符串前面用“符號(-)”來排序,可以重寫“富比較”方法
#學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:531509025 class Reversinator(object): def __init__(self, obj): self.obj = obj def __lt__(self, other): return other.obj < self.obj student_tuples = [ ('john', 'A', 96), ('leky', 'D', 63), ('andy', 'A', 92), ('jane', 'B', 82), ('dave', 'B', 85), ('cany', 'A', 96), ] print(sorted(student_tuples, key=lambda student: [student[1], -student[2], Reversinator(student[0])], reverse=True)) [('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('cany', 'A', 96), ('john', 'A', 96)]
到此這篇關(guān)于Python序列排序的具體場景實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python序列排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jupyter notebook讀取/導(dǎo)出文件/圖片實(shí)例
這篇文章主要介紹了jupyter notebook讀取/導(dǎo)出文件/圖片實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python下調(diào)用Linux的Shell命令的方法
有時候難免需要直接調(diào)用Shell命令來完成一些比較簡單的操作,這篇文章主要介紹了Python下調(diào)用Linux的Shell命令的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06python中os和sys模塊的區(qū)別與常用方法總結(jié)
這篇文章主要給大家介紹了關(guān)于python中os和sys模塊的區(qū)別與常用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11Tensorflow使用Anaconda、pycharm安裝記錄
這篇文章主要介紹了Tensorflow使用Anaconda、pycharm安裝記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07python用tkinter實(shí)現(xiàn)一個gui的翻譯工具
這篇文章主要介紹了python用tkinter實(shí)現(xiàn)一個gui的翻譯工具,幫助大家更好的理解和使用python,感興趣的朋友可以了解下 +2020-10-10Python對Tornado請求與響應(yīng)的數(shù)據(jù)處理
這篇文章主要介紹了Python對Tornado請求與響應(yīng)的數(shù)據(jù)處理,需要的朋友可以參考下2020-02-02簡單介紹Python的Django框架的dj-scaffold項(xiàng)目
這篇文章主要介紹了簡單介紹Python的Django框架的dj-scaffold項(xiàng)目,用于輔助Django框架的目錄設(shè)置,需要的朋友可以參考下2015-05-05Python自動化辦公之圖片轉(zhuǎn)PDF的實(shí)現(xiàn)
實(shí)現(xiàn)圖片轉(zhuǎn)換成PDF文檔的操作方法有很多,綜合對比以后感覺fpdf這個模塊用起來比較方便而且代碼量相當(dāng)少。所以本文將利用Python語言實(shí)現(xiàn)圖片轉(zhuǎn)PDF,感興趣的可以了解一下2022-04-04tensorflow模型的save與restore,及checkpoint中讀取變量方式
這篇文章主要介紹了tensorflow模型的save與restore,及checkpoint中讀取變量方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05