您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關python中sort()和sorted()的區別是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
sorted():該函數第一個參數iterable為任意可以迭代的對象,cmp是比較函數,通常為lambda函數,key是用于比較的關鍵字,reverse表示排序結果是否反轉。
L.sort():該函數的三個參數和 sorted() 的后三個參數含義是一致的,而需要特別注意的是,該函數只適用于列表,而非任意可以迭代的對象。cmp是比較函數,接受兩個對象參數 x 和 y,返回 負數(x<y),0(x=y),正數(x>y)。
讓我們通過示例看一下:
L.sort()
A = [3,6,1,5,4,2]
A.sort()
這里需要注意的一點是,調用 L.sort() 完成排序后,改變了要排序的列表的結構, 即排序后A為[1, 2, 3, 4, 5, 6]。
我們可以指定關鍵字排序,比如:
student = [['Tom', 'A', 20], ['Jack', 'C', 18], ['Andy', 'B', 11]]
student.sort(key=lambda student: student[2])
學生列表中包含列表,每個列表是學生的姓名、成績以及年齡,排序過程中指定了key為學生的年齡,所以排序的結果為:[['Andy', 'B', 11], ['Jack', 'C', 18], ['Tom', 'A', 20]]。
除了通過key來實現,根據年齡排序我們也可以通過定義cmp函數來實現:
student = [['Tom', 'A', 20], ['Jack', 'C', 18], ['Andy', 'B', 11]]
student.sort(cmp=lambda x, y: x[2] - y[2])
通過定義 key 和 cmp 都可以完成排序,但是這兩者之間有什么區別呢?cmp傳入的函數在整個排序過程中會調用多次,因為會進行多次比較,所以函數調用開銷較大,因此使用 key 的效率比 cmp 的效率要高。
sorted()
sorted()可以應用于任意的可以迭代的對象,所以應用范圍比L.sort() 廣泛的多,可以應用于字符串,元組,列表,字典等可迭代對象。
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())
需要注意的是,該函數會返回一個排序后的列表,原有可迭代對象保持不變,這與 L.sort() 函數不同。然而,這會浪費較大的存儲空間,尤其是數據量較大時。所以,在列表進行排序時,需要考慮是否需要保存原列表,如果無需保存原列表,則優先使用L.sort() 節省內存空間,提高效率。
有的排序可能需要根據兩個關鍵字,常用的比如單詞的排序,第一個字母相同然后根據第二個字母排序,Python中的 sorted() 函數是否支持這種實現呢?答案是肯定的,再設置 key 時指定多個屬性即可:
L = ['cat', 'binary', 'big', 'dog']
print sorted(L, key=lambda x: (x[0], x[1], x[2]))
排序的結果為 ['big', 'binary', 'cat', 'dog']。
總結
L.sort() 函數只適用于列表排序,而sorted()函數適用于任意可以迭代的對象排序。
L.sort() 函數排序會改變原有的待排序列表,而sorted()函數則不會改變。所以在使用列表進行排序時,需要考慮是否需要保存原列表,如果無需保存原列表,則優先使用L.sort() 節省內存空間,提高效率。
兩個函數通過定義 key 和 cmp 都可以完成排序,但是 key 的效率要遠遠高于 cmp,所以要優先使用 key 。
上述就是小編為大家分享的python中sort()和sorted()的區別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。