python中常用排序操作sort方法和sorted函數(shù)的使用超詳細(xì)講解(內(nèi)置模板代碼!)
前言
在Python中,排序的方法有多種,其中最常用的是使用內(nèi)置的 sort()
方法和 sorted()
函數(shù),接下來(lái)我將通過(guò)各種案例帶領(lǐng)大家輕松學(xué)會(huì)這兩種方法,同時(shí)還會(huì)擴(kuò)展一些實(shí)用的排序案例模板代碼。
1、sort()方法的使用
sort()
方法是列表(List)對(duì)象的一個(gè)方法,它會(huì)直接對(duì)原列表進(jìn)行排序,不返回新的列表。這意味著它會(huì)改變?cè)斜淼捻樞颍摲椒ㄖ荒茏饔糜诹斜怼?/p>
1.1 基礎(chǔ)操作
語(yǔ)法格式:
列表對(duì)象.sort(reverse=False)
,升序排序,默認(rèn)不寫(xiě)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)行排序,具體來(lái)說(shuō),字符串的排序是逐字符比較的:
1、比較兩個(gè)字符串的第一個(gè)字符,根據(jù)它們的 Unicode 碼點(diǎn)值排序。
2、如果第一個(gè)字符相同,則比較第二個(gè)字符,依此類推。
3、如果所有字符都相同,則兩個(gè)字符串被認(rèn)為是相等的。
1.2 操作進(jìn)階(自定義排序的對(duì)象)
語(yǔ)法格式:列表對(duì)象.sort(reverse=,key=函數(shù)名)
我們通過(guò)key
參數(shù)接收一個(gè)函數(shù),該函數(shù)會(huì)在列表中的每個(gè)元素上調(diào)用,通過(guò)對(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)度,通過(guò)長(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ǔ)操作
語(yǔ)法格式:sorted(可迭代對(duì)象,reverse=)
參數(shù)說(shuō)明:
reverse=False
,升序排序,默認(rèn)不寫(xiě)為升序排序
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ì)象)
語(yǔ)法格式:sorted(可迭代對(duì)象,reverse=,key=函數(shù)名)
無(wú)論是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_(kāi)發(fā)中,經(jīng)常會(huì)將一些數(shù)據(jù),如:文本、圖片、視頻、音頻等按順序命名存放在某個(gè)文件夾下,當(dāng)需要通過(guò)python來(lái)處理這些數(shù)據(jù)時(shí),通常會(huì)獲取每個(gè)文件的路徑并存放到一個(gè)列表中,這時(shí)我們?nèi)魧?duì)這個(gè)列表進(jìn)行排序,會(huì)出現(xiàn)一些問(wèn)題,如下:
問(wè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']
說(shuō)明:從上面的結(jié)果可以看到,我們?cè)臼谴蛩銓⒙窂桨?、2、3、4…進(jìn)行升序排序,但返回的結(jié)果卻不是如此,造成這種問(wèn)題的原因是因?yàn)閟ort()方法和sorted()函數(shù)在對(duì)字符串進(jìn)行排序的時(shí)候是按每個(gè)字符的unicode碼點(diǎn)值進(jìn)行排序的,因此我們需要對(duì)數(shù)據(jù)做一些處理,再進(jìn)行排序,這里可以使用key參數(shù)來(lái)解決這個(gè)問(wèn)題
解決方法模板代碼:
# 對(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將圖片轉(zhuǎn)為漫畫(huà)風(fēng)格的示例
本文主要介紹了Python將圖片轉(zhuǎn)為漫畫(huà)風(fēng)格的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Python預(yù)測(cè)2020高考分?jǐn)?shù)和錄取情況
這篇文章主要介紹了Python預(yù)測(cè)2020高考分?jǐn)?shù)和錄取情況可能是這樣,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Tensorflow2.1實(shí)現(xiàn)Fashion圖像分類示例詳解
這篇文章主要為大家介紹了Tensorflow2.1實(shí)現(xiàn)Fashion圖像分類示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11python同時(shí)給兩個(gè)收件人發(fā)送郵件的方法
這篇文章主要介紹了python同時(shí)給兩個(gè)收件人發(fā)送郵件的方法,涉及Python使用smtplib包發(fā)送郵件的相關(guān)技巧,需要的朋友可以參考下2015-04-04django 解決自定義序列化返回處理數(shù)據(jù)為null的問(wèn)題
這篇文章主要介紹了django 解決自定義序列化返回處理數(shù)據(jù)為null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Python?async+request與async+aiohttp實(shí)現(xiàn)異步網(wǎng)絡(luò)請(qǐng)求探索
這篇文章主要介紹了Python?async+request與async+aiohttp實(shí)現(xiàn)異步網(wǎng)絡(luò)請(qǐng)求探索,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10python 遍歷可迭代對(duì)象的實(shí)現(xiàn)方法
本文主要介紹了python 遍歷可迭代對(duì)象的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python3訪問(wèn)sina首頁(yè)中文的處理方法
如果用python3的urllib或python2的urllib2訪問(wèn)網(wǎng)頁(yè),都不能得到正確的中文字符串,看下面的解決方法2014-02-02