python中常用排序操作sort方法和sorted函數(shù)的使用超詳細(xì)講解(內(nèi)置模板代碼!)
前言
在Python中,排序的方法有多種,其中最常用的是使用內(nèi)置的 sort() 方法和 sorted() 函數(shù),接下來我將通過各種案例帶領(lǐng)大家輕松學(xué)會(huì)這兩種方法,同時(shí)還會(huì)擴(kuò)展一些實(shí)用的排序案例模板代碼。
1、sort()方法的使用
sort() 方法是列表(List)對(duì)象的一個(gè)方法,它會(huì)直接對(duì)原列表進(jìn)行排序,不返回新的列表。這意味著它會(huì)改變?cè)斜淼捻樞?,該方法只能作用于列表?/p>
1.1 基礎(chǔ)操作
語法格式:
列表對(duì)象.sort(reverse=False),升序排序,默認(rèn)不寫reverse參數(shù),為升序排序
列表對(duì)象.sort(reverse=True),降序排序
案例1:讓列表中的元素升序排序
# 列表中的元素都為為數(shù)字類型 my_list = [5, 2, 9, 1, 5, 6] my_list.sort() # 默認(rèn)升序排序, print(my_list) # 輸出: [1, 2, 5, 5, 6, 9] # 列表中的元素都為字符串類型 words = ["apple", "orange", "banana", "pear"] words.sort() print(words) # 輸出: ['apple', 'banana', 'orange', 'pear']
案例2:讓列表中的元素降序排序
# 列表中的元素都為為數(shù)字類型 my_list = [5, 2, 9, 1, 5, 6] my_list.sort(reverse=True) # 降序排序,可以傳遞 reverse=True 參數(shù) print(my_list) # 輸出: [9, 6, 5, 5, 2, 1] # 列表中的元素都為字符串類型 words = ["apple", "orange", "banana", "pear"] words.sort(reverse=True) print(words) # 輸出: ['pear', 'orange', 'banana', 'apple']
注意:
- 列表中的元素必須為同一數(shù)據(jù)類型,才可以進(jìn)行排序,否則會(huì)報(bào)錯(cuò)
- sort 方法只能作用于列表對(duì)象,不能直接跟在數(shù)據(jù)后面,否則會(huì)返回None;如:
# 錯(cuò)誤使用 my_list = [5, 2, 9, 1, 5, 6].sort() # sort方法不能直接跟在數(shù)據(jù)后面使用 print(my_list) # 輸出:None # 正確使用 my_list = [5, 2, 9, 1, 5, 6] my_list.sort() # 默認(rèn)升序排序, print(my_list) # 輸出: [1, 2, 5, 5, 6, 9]
- 當(dāng)列表中的元素為字符串時(shí),sort() 方法會(huì)根據(jù)字符串的 Unicode 碼點(diǎn)進(jìn)行排序,具體來說,字符串的排序是逐字符比較的:
1、比較兩個(gè)字符串的第一個(gè)字符,根據(jù)它們的 Unicode 碼點(diǎn)值排序。
2、如果第一個(gè)字符相同,則比較第二個(gè)字符,依此類推。
3、如果所有字符都相同,則兩個(gè)字符串被認(rèn)為是相等的。
1.2 操作進(jìn)階(自定義排序的對(duì)象)
語法格式:列表對(duì)象.sort(reverse=,key=函數(shù)名)我們通過key參數(shù)接收一個(gè)函數(shù),該函數(shù)會(huì)在列表中的每個(gè)元素上調(diào)用,通過對(duì)函數(shù)返回的結(jié)果進(jìn)行排序;該函數(shù)可以是匿名函數(shù)、自定義函數(shù)或內(nèi)置函數(shù)。
案例1:使用內(nèi)置函數(shù)進(jìn)行排序
# 按字符串長(zhǎng)度升序排序(適用于字符串列表) words = ["apple", "banana", "cherry", "date"] words.sort(key=len) # key后面跟上函數(shù)名 print(words) # 輸出: ['date', 'apple', 'banana', 'cherry']
案例2:使用匿名函數(shù)進(jìn)行排序
# 對(duì)包含元組的列表按第二個(gè)元素排序 tuple_list = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] tuple_list.sort(reverse=True,key=lambda x: x[1]) # 直接在key后面跟上匿名函數(shù) print(tuple_list) # 輸出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
案例3:使用自定義函數(shù)進(jìn)行排序
# 自定義函數(shù)
def custom(s): # 這里s用于接收列表中的元素
return len(s) # 返回列表中每個(gè)元素的長(zhǎng)度,通過長(zhǎng)度進(jìn)行排序
words = ["apple", "banana", "cherry", "date"]
words.sort(key=custom)
print(words) # 輸出: ['date', 'apple', 'banana', 'cherry']
2、sorted()函數(shù)的使用
sorted()函數(shù)是Python的一個(gè)內(nèi)置函數(shù),它會(huì)返回一個(gè)新的已排序列表,而不會(huì)改變?cè)斜?,sorted函數(shù)功能強(qiáng)大,可以對(duì)所有可迭代對(duì)象,如:字符串、元祖等進(jìn)行排序,并返回一個(gè)排序后的列表
2.1 基礎(chǔ)操作
語法格式:sorted(可迭代對(duì)象,reverse=)參數(shù)說明:
reverse=False,升序排序,默認(rèn)不寫為升序排序
reverse=True,降序排序
案例:
# 對(duì)列表進(jìn)行升序排序 my_list = [5, 2, 9, 1, 5, 6] sorted_list = sorted(my_list) # 默認(rèn)升序排序 print(sorted_list) # 輸出: [1, 2, 5, 5, 6, 9] print(my_list) # 輸出: [5, 2, 9, 1, 5, 6],原列表未被改變 # 如果你想降序排序,可以傳遞 reverse=True 參數(shù) sorted_list_desc = sorted(my_list, reverse=True) print(sorted_list_desc) # 輸出: [9, 6, 5, 5, 2, 1] # 對(duì)字符串進(jìn)行升序排序 strs = '136297' new_strs = sorted(strs) print(new_strs) # 輸出:['1', '2', '3', '6', '7', '9'],返回了一個(gè)排序后的列表
2.2 操作進(jìn)行(自定義排序的對(duì)象)
語法格式:sorted(可迭代對(duì)象,reverse=,key=函數(shù)名)無論是sort()方法還是sorted()函數(shù),都可以接受一個(gè)key參數(shù),用于指定一個(gè)函數(shù),這個(gè)函數(shù)會(huì)在每個(gè)列表元素上調(diào)用,排序?qū)⒒诜祷氐慕Y(jié)果進(jìn)行。
案例:
# 按字符串長(zhǎng)度排序(適用于字符串列表) words = ["apple", "banana", "cherry", "date"] sorted_words = sorted(words, key=len) # key后面跟上函數(shù)名 print(sorted_words) # 輸出: ['date', 'apple', 'banana', 'cherry'] # 對(duì)包含元組的列表按第二個(gè)元素排序 tuple_list = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] sorted_tuple_list = sorted(tuple_list, key=lambda x: x[1]) print(sorted_tuple_list) # 輸出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
總結(jié):
- sort方法和sorted()函數(shù)的使用操作相同,但sort()方法只能作用于列表,而sorted()方法可以作用于所有可迭代對(duì)象
- sort()方法是在原列表對(duì)象上進(jìn)行排序,不會(huì)生成新的列表;而sorted()函數(shù)在對(duì)可迭代對(duì)象進(jìn)行排序后,會(huì)生成一個(gè)新的列表
3、擴(kuò)展:排序案例模板代碼
我們?cè)谌粘i_發(fā)中,經(jīng)常會(huì)將一些數(shù)據(jù),如:文本、圖片、視頻、音頻等按順序命名存放在某個(gè)文件夾下,當(dāng)需要通過python來處理這些數(shù)據(jù)時(shí),通常會(huì)獲取每個(gè)文件的路徑并存放到一個(gè)列表中,這時(shí)我們?nèi)魧?duì)這個(gè)列表進(jìn)行排序,會(huì)出現(xiàn)一些問題,如下:
問題案例:
image_paths = ['D:/image/1.png','D:/image/3.png','D:/image/5.png','D:/image/2.png','D:/image/4.png',
'D:/image/10.png','D:/image/7.png','D:/image/8.png','D:/image/9.png','D:/image/6.png',
'D:/image/11.png']
image_paths.sort() # 升序排序
print(image_paths)
輸出結(jié)果:
['D:/image/1.png', 'D:/image/10.png', 'D:/image/11.png', 'D:/image/2.png', 'D:/image/3.png', 'D:/image/4.png', 'D:/image/5.png', 'D:/image/6.png', 'D:/image/7.png', 'D:/image/8.png', 'D:/image/9.png']
說明:從上面的結(jié)果可以看到,我們?cè)臼谴蛩銓⒙窂桨?、2、3、4…進(jìn)行升序排序,但返回的結(jié)果卻不是如此,造成這種問題的原因是因?yàn)閟ort()方法和sorted()函數(shù)在對(duì)字符串進(jìn)行排序的時(shí)候是按每個(gè)字符的unicode碼點(diǎn)值進(jìn)行排序的,因此我們需要對(duì)數(shù)據(jù)做一些處理,再進(jìn)行排序,這里可以使用key參數(shù)來解決這個(gè)問題
解決方法模板代碼:
# 對(duì)列表中的元素進(jìn)行升序排序
image_paths = ['D:/image/1.png','D:/image/3.png','D:/image/5.png','D:/image/2.png','D:/image/4.png',
'D:/image/10.png','D:/image/7.png','D:/image/8.png','D:/image/9.png','D:/image/6.png',
'D:/image/11.png']
# 自定義函數(shù)
def sort_key(s):
# 使用切片獲取數(shù)字部分,并將其轉(zhuǎn)換為整數(shù)進(jìn)行排序
return int(''.join(filter(str.isdigit, s)))
# 1、使用soted()函數(shù)
new_image_paths = sorted(image_paths, key=sort_key)
print(new_image_paths)
# 2、使用sort()方法
image_paths.sort(key=sort_key)
print(image_paths)
# 兩種方法返回的結(jié)果相同
輸出結(jié)果:
['D:/image/1.png', 'D:/image/2.png', 'D:/image/3.png', 'D:/image/4.png', 'D:/image/5.png', 'D:/image/6.png', 'D:/image/7.png', 'D:/image/8.png', 'D:/image/9.png', 'D:/image/10.png', 'D:/image/11.png'] ['D:/image/1.png', 'D:/image/2.png', 'D:/image/3.png', 'D:/image/4.png', 'D:/image/5.png', 'D:/image/6.png', 'D:/image/7.png', 'D:/image/8.png', 'D:/image/9.png', 'D:/image/10.png', 'D:/image/11.png']
總結(jié)
到此這篇關(guān)于python中常用排序操作sort方法和sorted函數(shù)使用的文章就介紹到這了,更多相關(guān)python排序sort方法和sorted函數(shù)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python文件絕對(duì)路徑寫法介紹(windows)
今天小編就為大家分享一篇python文件絕對(duì)路徑寫法介紹(windows),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python對(duì)象轉(zhuǎn)換為json的方法步驟
這篇文章主要介紹了Python對(duì)象轉(zhuǎn)換為json的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Python驗(yàn)證用戶密碼是否規(guī)范腳本示例
對(duì)用戶密碼的強(qiáng)度進(jìn)行校驗(yàn),要求用戶密碼達(dá)到一定的強(qiáng)度,符合安全性要求,這篇文章主要給大家介紹了關(guān)于Python驗(yàn)證用戶密碼是否規(guī)范的相關(guān)資料,需要的朋友可以參考下2024-05-05
Django基于ORM操作數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Django基于ORM操作數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式總結(jié)分析了Django使用ORM操作數(shù)據(jù)庫的相關(guān)配置、增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
Python開發(fā)常用五種循環(huán)方式的場(chǎng)景性能比較
Python是一門高級(jí)編程語言,其擁有多種循環(huán)方式,如for循環(huán)、while循環(huán)、do-while循環(huán)等。本文將逐個(gè)分析Python所有的循環(huán)執(zhí)行效率和適用場(chǎng)景,需要的可以參考一下2023-04-04
深度學(xué)習(xí)小工程練習(xí)之tensorflow垃圾分類詳解
這篇文章主要介紹了練習(xí)深度學(xué)習(xí)的一個(gè)小工程,代碼簡(jiǎn)單明確,用來作為學(xué)習(xí)深度學(xué)習(xí)的練習(xí)很適合,對(duì)于有需要的朋友可以參考下,希望大家可以體驗(yàn)到深度學(xué)習(xí)帶來的收獲2021-04-04
python3編寫ThinkPHP命令執(zhí)行Getshell的方法
這篇文章主要介紹了python3編寫ThinkPHP命令執(zhí)行Getshell的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02
使用Python開發(fā)SQLite代理服務(wù)器的方法
今天小編就為大家分享一篇使用Python開發(fā)SQLite代理服務(wù)器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python實(shí)現(xiàn)將excel文件轉(zhuǎn)化成CSV格式
下面小編就為大家分享一篇python實(shí)現(xiàn)將excel文件轉(zhuǎn)化成CSV格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Pytorch中torch.cat()函數(shù)舉例解析
一般torch.cat()是為了把多個(gè)tensor進(jìn)行拼接而存在的,下面這篇文章主要給大家介紹了關(guān)于Pytorch中torch.cat()函數(shù)舉例解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

