python中常用排序操作sort方法和sorted函數的使用超詳細講解(內置模板代碼!)
前言
在Python中,排序的方法有多種,其中最常用的是使用內置的 sort()
方法和 sorted()
函數,接下來我將通過各種案例帶領大家輕松學會這兩種方法,同時還會擴展一些實用的排序案例模板代碼。
1、sort()方法的使用
sort()
方法是列表(List)對象的一個方法,它會直接對原列表進行排序,不返回新的列表。這意味著它會改變原列表的順序,該方法只能作用于列表。
1.1 基礎操作
語法格式:
列表對象.sort(reverse=False)
,升序排序,默認不寫reverse參數,為升序排序
列表對象.sort(reverse=True)
,降序排序
案例1:讓列表中的元素升序排序
# 列表中的元素都為為數字類型 my_list = [5, 2, 9, 1, 5, 6] my_list.sort() # 默認升序排序, print(my_list) # 輸出: [1, 2, 5, 5, 6, 9] # 列表中的元素都為字符串類型 words = ["apple", "orange", "banana", "pear"] words.sort() print(words) # 輸出: ['apple', 'banana', 'orange', 'pear']
案例2:讓列表中的元素降序排序
# 列表中的元素都為為數字類型 my_list = [5, 2, 9, 1, 5, 6] my_list.sort(reverse=True) # 降序排序,可以傳遞 reverse=True 參數 print(my_list) # 輸出: [9, 6, 5, 5, 2, 1] # 列表中的元素都為字符串類型 words = ["apple", "orange", "banana", "pear"] words.sort(reverse=True) print(words) # 輸出: ['pear', 'orange', 'banana', 'apple']
注意:
- 列表中的元素必須為同一數據類型,才可以進行排序,否則會報錯
- sort 方法只能作用于列表對象,不能直接跟在數據后面,否則會返回None;如:
# 錯誤使用 my_list = [5, 2, 9, 1, 5, 6].sort() # sort方法不能直接跟在數據后面使用 print(my_list) # 輸出:None # 正確使用 my_list = [5, 2, 9, 1, 5, 6] my_list.sort() # 默認升序排序, print(my_list) # 輸出: [1, 2, 5, 5, 6, 9]
- 當列表中的元素為字符串時,sort() 方法會根據字符串的 Unicode 碼點進行排序,具體來說,字符串的排序是逐字符比較的:
1、比較兩個字符串的第一個字符,根據它們的 Unicode 碼點值排序。
2、如果第一個字符相同,則比較第二個字符,依此類推。
3、如果所有字符都相同,則兩個字符串被認為是相等的。
1.2 操作進階(自定義排序的對象)
語法格式:列表對象.sort(reverse=,key=函數名)
我們通過key
參數接收一個函數,該函數會在列表中的每個元素上調用,通過對函數返回的結果進行排序;該函數可以是匿名函數、自定義函數或內置函數。
案例1:使用內置函數進行排序
# 按字符串長度升序排序(適用于字符串列表) words = ["apple", "banana", "cherry", "date"] words.sort(key=len) # key后面跟上函數名 print(words) # 輸出: ['date', 'apple', 'banana', 'cherry']
案例2:使用匿名函數進行排序
# 對包含元組的列表按第二個元素排序 tuple_list = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] tuple_list.sort(reverse=True,key=lambda x: x[1]) # 直接在key后面跟上匿名函數 print(tuple_list) # 輸出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
案例3:使用自定義函數進行排序
# 自定義函數 def custom(s): # 這里s用于接收列表中的元素 return len(s) # 返回列表中每個元素的長度,通過長度進行排序 words = ["apple", "banana", "cherry", "date"] words.sort(key=custom) print(words) # 輸出: ['date', 'apple', 'banana', 'cherry']
2、sorted()函數的使用
sorted()
函數是Python的一個內置函數,它會返回一個新的已排序列表,而不會改變原列表,sorted函數功能強大,可以對所有可迭代對象,如:字符串、元祖等進行排序,并返回一個排序后的列表
2.1 基礎操作
語法格式:sorted(可迭代對象,reverse=)
參數說明:
reverse=False
,升序排序,默認不寫為升序排序
reverse=True
,降序排序
案例:
# 對列表進行升序排序 my_list = [5, 2, 9, 1, 5, 6] sorted_list = sorted(my_list) # 默認升序排序 print(sorted_list) # 輸出: [1, 2, 5, 5, 6, 9] print(my_list) # 輸出: [5, 2, 9, 1, 5, 6],原列表未被改變 # 如果你想降序排序,可以傳遞 reverse=True 參數 sorted_list_desc = sorted(my_list, reverse=True) print(sorted_list_desc) # 輸出: [9, 6, 5, 5, 2, 1] # 對字符串進行升序排序 strs = '136297' new_strs = sorted(strs) print(new_strs) # 輸出:['1', '2', '3', '6', '7', '9'],返回了一個排序后的列表
2.2 操作進行(自定義排序的對象)
語法格式:sorted(可迭代對象,reverse=,key=函數名)
無論是sort()方法還是sorted()函數,都可以接受一個key參數,用于指定一個函數,這個函數會在每個列表元素上調用,排序將基于返回的結果進行。
案例:
# 按字符串長度排序(適用于字符串列表) words = ["apple", "banana", "cherry", "date"] sorted_words = sorted(words, key=len) # key后面跟上函數名 print(sorted_words) # 輸出: ['date', 'apple', 'banana', 'cherry'] # 對包含元組的列表按第二個元素排序 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')]
總結:
- sort方法和sorted()函數的使用操作相同,但sort()方法只能作用于列表,而sorted()方法可以作用于所有可迭代對象
- sort()方法是在原列表對象上進行排序,不會生成新的列表;而sorted()函數在對可迭代對象進行排序后,會生成一個新的列表
3、擴展:排序案例模板代碼
我們在日常開發(fā)中,經常會將一些數據,如:文本、圖片、視頻、音頻等按順序命名存放在某個文件夾下,當需要通過python來處理這些數據時,通常會獲取每個文件的路徑并存放到一個列表中,這時我們若對這個列表進行排序,會出現一些問題,如下:
問題案例:
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)
輸出結果:
['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']
說明:從上面的結果可以看到,我們原本是打算將路徑按1、2、3、4…進行升序排序,但返回的結果卻不是如此,造成這種問題的原因是因為sort()方法和sorted()函數在對字符串進行排序的時候是按每個字符的unicode碼點值進行排序的,因此我們需要對數據做一些處理,再進行排序,這里可以使用key參數來解決這個問題
解決方法模板代碼:
# 對列表中的元素進行升序排序 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'] # 自定義函數 def sort_key(s): # 使用切片獲取數字部分,并將其轉換為整數進行排序 return int(''.join(filter(str.isdigit, s))) # 1、使用soted()函數 new_image_paths = sorted(image_paths, key=sort_key) print(new_image_paths) # 2、使用sort()方法 image_paths.sort(key=sort_key) print(image_paths) # 兩種方法返回的結果相同
輸出結果:
['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']
總結
到此這篇關于python中常用排序操作sort方法和sorted函數使用的文章就介紹到這了,更多相關python排序sort方法和sorted函數用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Tensorflow2.1實現Fashion圖像分類示例詳解
這篇文章主要為大家介紹了Tensorflow2.1實現Fashion圖像分類示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11Python?async+request與async+aiohttp實現異步網絡請求探索
這篇文章主要介紹了Python?async+request與async+aiohttp實現異步網絡請求探索,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-10-10