網站首頁 編程語言 正文
前言:
內容提要:本文比較了 Python 中用于列表排序的兩種函數 sort() 和 sorted(),幫助您選擇合適的排序函數。
對列表排序時,既可以用 List.sort(),也可以用 sorted(List),這兩個函數有什么不同呢?如何選擇?我以前常常分不清這兩個函數,等到程序報錯了,才知道 sorted 寫成 sort 了,List 不能寫在 sort() 括號里。您是否也有這個困惑呢?那就一起通過例子來熟悉這兩個函數吧,以后就知道應該怎么使用了。
1. 是否改變原列表
首先應用 List.sort()
對列表排序,
代碼示例如下:
letters=['a','dc','ab','D'] print('before sort: letters:',letters) result1=letters.sort() print('after sort: result1:',result1) print('after sort: letters:',letters)
運行結果為:
before sort: letters: ['a', 'dc', 'ab', 'D']
after sort: result1: None
after sort: letters: ['D', 'a', 'ab', 'dc']
可以看到,List.sort()
沒有返回值,而是直接改變了原列表。這既是優點也是缺點。說它是優點呢,有時不需要再使用原列表,直接修改原列表可以節約內存空間,尤其當這個列表很大時。而它的缺點也正是因為改了原列表,新手在程序設計時容易忽視這一點,在后續程序中錯誤地操作列表,導致得不到預計的結果。
再來看一下應用 sorted(List)
對列表排序的效果,
代碼示例如下:
letters=['a','dc','ab','D'] print('before sorted: letters:',letters) result2=sorted(letters) print('after sorted: result2:',result2) print('after sorted: letters:',letters)
運行結果為:
before sorted: letters: ['a', 'dc', 'ab', 'D']
after sorted: result2: ['D', 'a', 'ab', 'dc']
after sorted: letters: ['a', 'dc', 'ab', 'D']
可以看到,sorted(List)
返回一個排序好的新列表,原列表不變。
依據上述對比,在選擇排序函數時,我們需要考慮兩點:
- 1.是否希望改變原列表,如果是,選擇 sort()。如果原列表不能修改,選擇 sorted()。
- 2.注意使用函數的返回值,或者說排序好的列表存在哪里。比如代碼為 list2=list1.sort() 或者 function(list1.sort()),那么 list2 其實是 None,而不是排序好的列表。同理,
function()
函數的輸入也是 None。list1 才是排序好的列表。
2.參數設置:key 和 reverse
看上面例子中列表 letters
的排序結果,發現 D 居然排在 a 的前面?這是因為 ASCII 碼中大寫英文字母排在小寫英文字母的前面。那么,如果我們想實現按字母順序,不區分大小寫的排序,應該怎么辦呢?
方法:可以設置 key 參數,對 sort() 和 sorted() 都適用。
比如:設置key=str.lower
,就是按字符的小寫字母形式排序。
代碼示例如下:
letters=['a','dc','ab','D'] letters.sort(key=str.lower) print(letters)
運行結果為:
['a', 'ab', 'D', 'dc']
此外,默認是按升序排列。也可以設置reverse=True,
就是按降序排列。這一參數同樣是對 sort() 和 sorted() 都適用。下面的代碼示例同時設置了 key 和 reverse 參數。
letters=['a','dc','ab','D'] result=sorted(letters,key=str.lower,reverse=True) print(result)
運行結果為:
['dc', 'D', 'ab', 'a']
3.輸入數據類型
List.sort()
是列表對象(object
)的一個方法(method
),因此只能用于列表。
而sorted()
函數是 Python 語言的內置函數,可以用于 iterables,包括 列表(List),元組(Tuple),字典(Dict)等等。iterable 對象有一個特點,就是可以用在循環 for 語句中(例如上面例子的列表 letters,可以用在 for 語句中:for e in letters:)。
下面我們來看看不同數據類型應用 sorted()
函數的例子。需要注意的是,雖然 sorted() 的輸入可以有多種類型,但是輸出都是排序好的列表。
輸入為元組(Tuple)時:
letters=('a','dc','ab','D') result=sorted(letters) print(result)
運行結果為:
['D', 'a', 'ab', 'dc']
輸入為字符串(Str)時:
letters='dasf' result=sorted(letters) print(result)
運行結果為:
['a', 'd', 'f', 's']
從結果可以看出,輸入為字符串時,輸出為排序好的字符列表,單個字符為列表的一個元素。
輸入為字典(Dict)時:
letters={'b':1,'a':3,'d':2,'c':1} result=sorted(letters) print(result)
運行結果為:
['a', 'b', 'c', 'd']
從結果可以看出,sorted()
函數輸出的結果是對letters.key()
排序得到的列表。
參考:https://docs.python.org/3/howto/sorting.html
原文鏈接:https://blog.csdn.net/applebear1123/article/details/123645126
相關推薦
- 2022-09-15 C#中DateTime的時間加減法操作小結_C#教程
- 2022-06-01 C語言?柔性數組的使用詳解_C 語言
- 2023-02-25 Golang內存泄漏場景以及解決方案詳析_Golang
- 2023-03-27 使用seaborn繪制強化學習中的圖片問題_python
- 2022-04-24 解決redis在linux上的部署的問題_Redis
- 2022-10-05 教你使用RustDesk?搭建一個自己的遠程桌面中繼服務器_服務器其它
- 2023-02-01 docker中安裝elasticsarch?等鏡像的過程_docker
- 2022-04-25 python遞歸&迭代方法實現鏈表反轉_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支