Python中sort函數(shù)正則表達式的使用
最近老是遇到使用python的sort函數(shù)時忘記怎么寫排序規(guī)則的情況,這里好好整理一下。
1.sort函數(shù)最簡單的用法
最簡單的就是利用sort函數(shù)對一維列表進行排序:
l = [99, 55, 66, 10, 80] l.sort() print(l)
輸出:
[10, 55, 66, 80, 99]
2.sort函數(shù)reverse
如果需要降序排序,那么可以給sort函數(shù)的reverse設(shè)置成True:
l = [99, 55, 66, 10, 80] l.sort(reverse=True) print(l)
輸出:
[99, 80, 66, 55, 10]
3.自定義比較函數(shù)
如果列表當中的每一個元素都是一個列表,即算法競賽當中經(jīng)常遇到的二維數(shù)組這種情況,那么上面兩種寫法就都不適用了。熟悉C++的都知道,在C++中可以自定義一個cmp函數(shù)來指定自己的排序規(guī)則,那么在python當中也可以這樣:
l = [[2,1], [1,3],[3,0]] def cmp(x): # 這里表示按照每個元素的第0個元素來排序 return x[0] l.sort(key=cmp) print(l)
輸出:
[[1, 3], [2, 1], [3, 0]]
4.自定義比較函數(shù)plus
如果比較的規(guī)則更復(fù)雜,比如優(yōu)先按照第0個元素進行比較,然后按照第1個元素比較,這種情況只需要在cmp函數(shù)當中返回一個元組就可以了:
l = [[2,1,1], [2,0,3],[1,2,0],[3,-10,-10]] def cmp(x): # 這里表示先按照第0個元素,再按照第一個元素 return (x[0],x[1]) l.sort(key=cmp) print(l)
輸出:
[[1, 2, 0], [2, 0, 3], [2, 1, 1], [3, -10, -10]]
5.正則表達式
可以看到排序規(guī)則寫起來有點麻煩,還需要重新寫一個排序函數(shù),如果有多個數(shù)組需要這樣排序,可能還會寫多個排序規(guī)則。在python中還可以用正則表達式來寫排序規(guī)則:
l = [[2,1,1], [2,0,3],[1,2,0],[3,-10,-10]] l.sort(key = lambda x : (x[0], x[1])) print(l)
輸出:
[[1, 2, 0], [2, 0, 3], [2, 1, 1], [3, -10, -10]]
與sorted的區(qū)別
sorted() 函數(shù)是Python中的內(nèi)置函數(shù)
sorted 可以對所有可迭代的對象進行排序操作,尤其是可以對字典進行排序。sorted() 函數(shù)將重新排序 iterable 參數(shù)中的元素,并將結(jié)果返回一個新的列表(對原列表的順序不會產(chǎn)生影響)。
語法格式為:sorted(iterable, key=None, reverse=False)。
- iterable:指定一個待排序的可迭代對象。
- key:指定一個只有單個參數(shù)的函數(shù),用于從 iterable
參數(shù)的每個元素中提取用于比較的有效關(guān)鍵值(比如可以用 key = str.lower 來實現(xiàn)忽略大小寫的排序;或者用 key = len
進行基于字符串長度的排序) - reverse:該參數(shù)是一個布爾類型值,如果設(shè)置為 True,則將結(jié)果反向排序,默認值是 False。
例子演示:1、對列表進行排序
num = [1,5,3,2,8,4,0] print(sorted(num))
結(jié)果:
[0, 1, 2, 3, 4, 5, 8]
2、對元祖進行排序
num2 = (3,2,7,4,0,1,1) print(sorted(num2))
結(jié)果:
[0, 1, 1, 2, 3, 4, 7]
3、對字典進行排序
對于字典而言,默認對keys進行排序
num3 = {"Houmin":18, "Chen":22, "Wang":12} print(sorted(num3)) # 對于字典而言,默認對keys進行排序 print(sorted(num3.items())) # 根據(jù)items進行排序,以列表形式返回鍵值對 print(sorted(num3.values())) # 對字典中的值進行排序,返回列表形式
結(jié)果:
['Chen', 'Houmin', 'Wang']
[('Chen', 22), ('Houmin', 18), ('Wang', 12)]
[12, 18, 22]
根據(jù)年齡從大到小進行排序
num3 = {"Houmin":18, "Chen":22, "Wang":12} print(sorted(num3.items(),key=lambda x:x[1])) print(sorted(num3.items(), key=lambda x:x[-1]))
結(jié)果:
[('Wang', 12), ('Houmin', 18), ('Chen', 22)]
[('Wang', 12), ('Houmin', 18), ('Chen', 22)]
根據(jù)年齡從大到小進行排序
print(sorted(num3.items(), key=lambda x:x[1], reverse=True))
結(jié)果:
[('Chen', 22), ('Houmin', 18), ('Wang', 12)]
到此這篇關(guān)于Python中sort函數(shù)正則表達式的使用的文章就介紹到這了,更多相關(guān)Python sort正則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python實現(xiàn)CGI環(huán)境搭建過程解析
這篇文章主要介紹了使用python實現(xiàn)CGI環(huán)境搭建過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04在Python中字符串、列表、元組、字典之間的相互轉(zhuǎn)換
這篇文章主要介紹了在Python中字符串、列表、元組、字典之間的相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11win10下opencv-python特定版本手動安裝與pip自動安裝教程
這篇文章主要介紹了win10下opencv-python特定版本手動安裝與pip自動安裝教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03Python報錯:ModuleNotFoundError的解決辦法
"ModuleNotFoundError: No module named 'xxx'"這個報錯是個非常常見的報錯,幾乎每個python程序員都遇到過,下面這篇文章主要給大家介紹了關(guān)于Python報:ModuleNotFoundError錯誤的解決辦法,需要的朋友可以參考下2022-06-06python中將阿拉伯數(shù)字轉(zhuǎn)換成中文的實現(xiàn)代碼
用于將阿拉伯數(shù)字轉(zhuǎn)換化大寫中文。程序沒經(jīng)過任何優(yōu)化,出沒經(jīng)過詳細的測試,掛到網(wǎng)上,方便將來有需要的時候直接拿來用2011-05-05分享Pandas庫中的一些寶藏函數(shù)transform()
Pandas具有很多強大的功能,transform就是其中之一,利用它可以高效地匯總數(shù)據(jù)且不改變數(shù)據(jù)行數(shù),transform是一種什么數(shù)據(jù)操作?如果熟悉SQL的窗口函數(shù),就非常容易理解了2021-09-09