這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)python中sort()和sorted()的區(qū)別是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、滄州ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的滄州網(wǎng)站制作公司
sorted():該函數(shù)第一個參數(shù)iterable為任意可以迭代的對象,cmp是比較函數(shù),通常為lambda函數(shù),key是用于比較的關(guān)鍵字,reverse表示排序結(jié)果是否反轉(zhuǎn)。
L.sort():該函數(shù)的三個參數(shù)和 sorted() 的后三個參數(shù)含義是一致的,而需要特別注意的是,該函數(shù)只適用于列表,而非任意可以迭代的對象。cmp是比較函數(shù),接受兩個對象參數(shù) x 和 y,返回 負數(shù)(x
讓我們通過示例看一下:
L.sort()
A = [3,6,1,5,4,2]
A.sort()
這里需要注意的一點是,調(diào)用 L.sort() 完成排序后,改變了要排序的列表的結(jié)構(gòu), 即排序后A為[1, 2, 3, 4, 5, 6]。
我們可以指定關(guān)鍵字排序,比如:
student = [['Tom', 'A', 20], ['Jack', 'C', 18], ['Andy', 'B', 11]]
student.sort(key=lambda student: student[2])
學(xué)生列表中包含列表,每個列表是學(xué)生的姓名、成績以及年齡,排序過程中指定了key為學(xué)生的年齡,所以排序的結(jié)果為:[['Andy', 'B', 11], ['Jack', 'C', 18], ['Tom', 'A', 20]]。
除了通過key來實現(xiàn),根據(jù)年齡排序我們也可以通過定義cmp函數(shù)來實現(xiàn):
student = [['Tom', 'A', 20], ['Jack', 'C', 18], ['Andy', 'B', 11]]
student.sort(cmp=lambda x, y: x[2] - y[2])
通過定義 key 和 cmp 都可以完成排序,但是這兩者之間有什么區(qū)別呢?cmp傳入的函數(shù)在整個排序過程中會調(diào)用多次,因為會進行多次比較,所以函數(shù)調(diào)用開銷較大,因此使用 key 的效率比 cmp 的效率要高。
sorted()
sorted()可以應(yīng)用于任意的可以迭代的對象,所以應(yīng)用范圍比L.sort() 廣泛的多,可以應(yīng)用于字符串,元組,列表,字典等可迭代對象。
B = 'Python'
sorted(B)
C = (3, 6, 1, 5, 4, 2)
sorted(C)
D = [3, 6, 1, 5, 4, 2]
sorted(D)
E = {'1': 'a', '2': 'b', '0': 'c'}
sorted(E.items())
需要注意的是,該函數(shù)會返回一個排序后的列表,原有可迭代對象保持不變,這與 L.sort() 函數(shù)不同。然而,這會浪費較大的存儲空間,尤其是數(shù)據(jù)量較大時。所以,在列表進行排序時,需要考慮是否需要保存原列表,如果無需保存原列表,則優(yōu)先使用L.sort() 節(jié)省內(nèi)存空間,提高效率。
有的排序可能需要根據(jù)兩個關(guān)鍵字,常用的比如單詞的排序,第一個字母相同然后根據(jù)第二個字母排序,Python中的 sorted() 函數(shù)是否支持這種實現(xiàn)呢?答案是肯定的,再設(shè)置 key 時指定多個屬性即可:
L = ['cat', 'binary', 'big', 'dog']
print sorted(L, key=lambda x: (x[0], x[1], x[2]))
排序的結(jié)果為 ['big', 'binary', 'cat', 'dog']。
總結(jié)
L.sort() 函數(shù)只適用于列表排序,而sorted()函數(shù)適用于任意可以迭代的對象排序。
L.sort() 函數(shù)排序會改變原有的待排序列表,而sorted()函數(shù)則不會改變。所以在使用列表進行排序時,需要考慮是否需要保存原列表,如果無需保存原列表,則優(yōu)先使用L.sort() 節(jié)省內(nèi)存空間,提高效率。
兩個函數(shù)通過定義 key 和 cmp 都可以完成排序,但是 key 的效率要遠遠高于 cmp,所以要優(yōu)先使用 key 。
上述就是小編為大家分享的python中sort()和sorted()的區(qū)別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。