python排序函數(shù)sort()與sorted()的區(qū)別
python 中sorted與sort有什么區(qū)別
sort(cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)
sort是容器的函數(shù),用List的成員函數(shù)sort進(jìn)行排序
sorted是Python的內(nèi)建函數(shù)相同的參數(shù),用built-in函數(shù)sorted進(jìn)行排序
sorted(iterable,key=None,reverse=False),返回新的列表,對(duì)所有可迭代的對(duì)象均有效
sort(key=None,reverse=False) 就地改變列表 reverse:True反序;False 正序
例如:
>>> a=[1,3,5,2,9,4,7,8,6,0] >>> a.sort() >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a=[1,3,5,2,9,4,7,8,6,0] >>> sorted(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a [1, 3, 5, 2, 9, 4, 7, 8, 6, 0]
以下是詳細(xì)說(shuō)明
Python list內(nèi)置sort()方法用來(lái)排序,也可以用python內(nèi)置的全局sorted()方法來(lái)對(duì)可迭代的序列排序生成新的序列。
sorted(iterable,key=None,reverse=False),返回新的列表,對(duì)所有可迭代的對(duì)象均有效
sort(key=None,reverse=False) 就地改變列表 reverse:True反序;False 正序
sort是容器的函數(shù):sort(cmp=None, key=None, reverse=False)
sorted是python的內(nèi)建函數(shù):sorted(iterable, cmp=None, key=None, reverse=False)
參數(shù)解析:
cmp:比較函數(shù),比較什么參數(shù)由key決定。例如:cmp(e1, e2) 是具有兩個(gè)參數(shù)的比較函數(shù),返回值:負(fù)數(shù)(e1 < e2);0(e1 == e2);正數(shù)( e1 > e2)。
key:用列表元素的某個(gè)屬性或函數(shù)作為關(guān)鍵字。
reverse:排序規(guī)則,可以選擇True或者False。
sorted多一個(gè)參數(shù)iterable:待排序的可迭代類型的容器
示例1:
>>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> a.sort() >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12] >>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> sorted(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12] >>> a [1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]
區(qū)別:
對(duì)于一個(gè)無(wú)序的列表a,調(diào)用a.sort(),對(duì)a進(jìn)行排序后返回a,sort()函數(shù)修改待排序的列表內(nèi)容。
而對(duì)于同樣一個(gè)無(wú)序的列表a,調(diào)用sorted(a),對(duì)a進(jìn)行排序后返回一個(gè)新的列表,而對(duì)a不產(chǎn)生影響。
示例2:
假設(shè)用元組保存每一個(gè)學(xué)生的信息,包括學(xué)號(hào),姓名,年齡。用列表保存所有學(xué)生的信息。
>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)] >>> list1.sort() >>> list1 [(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)] >>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)] >>> sorted(list1) [(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)] >>> list1 [(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
小結(jié):由示例可以看出,當(dāng)列表由list(或者tuple)組成時(shí),默認(rèn)情況下,sort和sorted都會(huì)根據(jù)list[0](或者tuple[0])作為排序的key,進(jìn)行排序。
以上都是默認(rèn)的排序方式,我們可以編寫代碼控制兩個(gè)函數(shù)的排序行為。主要有三種方式:基于key函數(shù);基于cmp函數(shù)和基于reverse函數(shù)
1)基于key函數(shù)排序
>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)] >>> list1.sort(key=lambda x:x[2]) >>> list1 [(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)] >>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)] >>> sorted(list1, key=lambda x:x[2]) [(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)] >>> list1 [(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
2)基于cmp函數(shù)
>>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)] >>> list1.sort(cmp=lambda x,y:cmp(x[1],y[1])) >>> list1 [(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)] >>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)] >>> sorted(list1, cmp=lambda x,y:cmp(x[1],y[1])) [(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)] >>> list1 [(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
3)基于reverse函數(shù)
>>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> a.sort(reverse=False) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12] >>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> a.sort(reverse=True) >>> a [12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> a.sort(reverse=True)
小結(jié):reverse=False為升序排序;reverse=True為降序排序
相關(guān)文章
Python中easy_install 和 pip 的安裝及使用
本篇文章主要介紹了Python中easy_install 和 pip 的安裝及使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Python中sorted()函數(shù)之排序的利器詳解
sorted()函數(shù)是Python中的內(nèi)置函數(shù),用于對(duì)可迭代對(duì)象進(jìn)行排序,下面這篇文章主要給大家介紹了關(guān)于Python中sorted()函數(shù)之排序的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
python利用Appium實(shí)現(xiàn)自動(dòng)控制移動(dòng)設(shè)備并提取數(shù)據(jù)功能
這篇文章主要介紹了python利用Appium自動(dòng)控制移動(dòng)設(shè)備并提取數(shù)據(jù),本文以控制抖音app滑動(dòng)并獲取抖音短視頻發(fā)布者為例,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
OpenCV計(jì)算平均值cv::mean實(shí)例代碼
函數(shù)cv::mean計(jì)算數(shù)組元素的平均值M,每個(gè)通道都是獨(dú)立的,并返回這個(gè)平均值,這篇文章主要給大家介紹了關(guān)于OpenCV計(jì)算平均值cv::mean的相關(guān)資料,需要的朋友可以參考下2021-08-08
使用Flask-Login模塊實(shí)現(xiàn)用戶身份驗(yàn)證和安全性
當(dāng)你想要在你的Flask應(yīng)用中實(shí)現(xiàn)用戶身份驗(yàn)證和安全性時(shí),F(xiàn)lask-Login這個(gè)擴(kuò)展將會(huì)是你的最佳伙伴,它提供了一組簡(jiǎn)單而強(qiáng)大的工具來(lái)處理,下面我們就來(lái)看看具體的操作方法吧2023-08-08
Python 16進(jìn)制與中文相互轉(zhuǎn)換的實(shí)現(xiàn)方法
今天小編就為大家分享一篇Python 16進(jìn)制與中文相互轉(zhuǎn)換的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

