Python 列表 sort()函數(shù)使用實例詳解
sort() 可以對列表進行「排序」
語法
list.sort( key, reverse )
參數(shù)
- key :(可選)指定排序規(guī)則
- reverse :(可選)升序降序
返回值
- 返回None,同時將原列表排序。也就是沒有返回值
案例:將列表中的元素排序
list1 = [1, 3, 2, 5] list1.sort() print(list1)
輸出:
[1, 2, 3, 5]
1、升序降序
reverse 參數(shù)控制排序的「升序」和「降序」,True表示降序、False表示升序;默認升序reverse=False
list1 = [1, 3, 2, 5] list1.sort(reverse=True) print(list1) list1.sort(reverse=False) print(list1) list1.sort() print(list1)
輸出:
[5, 3, 2, 1]
[1, 2, 3, 5]
[1, 2, 3, 5]
2、sort()和sorted()的區(qū)別
接收 sort() 的返回值,可以發(fā)現(xiàn)是None
list1 = [1, 3, 2, 5] list2 = list1.sort() print(list2)
輸出:
None
打印一下排序前、后的「內(nèi)存地址」,可以發(fā)現(xiàn)地址沒有改變
list1 = [1, 3, 2, 5] print(id(list1)) list1.sort() print(id(list1))
輸出:
2361470487744
2361470487744
sort() 的設(shè)計思想就是「修改」原列表,而不是返回新的列表;它不會創(chuàng)建新的列表,從而節(jié)省「效率」;當然,這也意味著原列表被修改了,使用時要留意這一點;sorted() 是 sort() 的擴展函數(shù),可以對列表的元素排序,同時不會修改原列表。
list1 = [1, 3, 2, 5] list2 = sorted(list1) print(list1) print(list2)
輸出:
[1, 3, 2, 5]
[1, 2, 3, 5]
從結(jié)果可以看到, sorted() 創(chuàng)建了新的列表,用來保存排序后的列表。
3、切片排序
將原列表「切片」復制給新列表,再對新列表排序,同樣可以實現(xiàn)排序且不改變原列表。
list1 = [1, 3, 2, 5] list2 = list1[:] list2.sort() print(list1) print(list2)
輸出:
[1, 3, 2, 5]
[1, 2, 3, 5]
直接「賦值」的方式是不行的,因為賦值的話,兩個列表會指向同一個內(nèi)存地址,原列表會同步變化。
list1 = [1, 3, 2, 5] list2 = list1 list2.sort() print(list1) print(list2)
輸出:
[1, 2, 3, 5]
[1, 2, 3, 5]
4、指定排序規(guī)則
key 參數(shù)可以指定排序「規(guī)則」
4.1、按字符串長度排序
對于元素全是字符串的「列表」,可以按照字符串的「長度」來排序
list1 = ['aaaaa', 'aa', 'aaaa', 'a'] list1.sort(key=len) print(list1)
輸出:
['a', 'aa', 'aaaa', 'aaaaa']
本質(zhì)上是利用字符串的 len() 函數(shù)計算長度,再排序,如果遇到 int 這列沒有 len() 函數(shù)的元素,就會報錯 TypeError: object of type ‘int’ has no len()。
4.2、按第二個字符排序
對于元素全是字符串的列表,可以按照元素的第幾個「字符」排序。
list1 = ['cb', 'fa', 'zd', 'ec'] list1.sort(key=lambda x: x[1]) print(list1)
輸出:
['fa', 'cb', 'ec', 'zd']
需要注意的是,所有元素的字符長度都要夠數(shù),比如元素只有1個字符,卻按照第2個字符排序,函數(shù)找不到第2個字符,肯定會報錯 IndexError: string index out of range
4.3、查找第n大的元素
先降序,再按照「索引」取值,就能獲取列表中第一大的值或第二大的值等。
list1 = [4, 3, 9, 6, 1] list1.sort(reverse=True) print('最大的元素:', list1[0]) print('第二大的元素:', list1[1])
輸出:
最大的元素: 9
第二大的元素: 6
5、其他類型排序
sort() 只能對列表排序,而 sorted() 能對可迭代對象排序;所以,字符串、元組、字典等類型想排序,可以用 sorted()
str1 = "312" print(sorted(str1)) tuple1 = (5, 1, 3) print(sorted(tuple1)) dict1 = {"key1": 1, "key2": 2} print(sorted(dict1))
輸出:
['1', '2', '3']
[1, 3, 5]
['key1', 'key2']
從輸出結(jié)果可以發(fā)現(xiàn),字符串、元組、字典類型排序后,返回的是列表類型;并且字典只對鍵排序,不對值排序。
到此這篇關(guān)于Python 列表 sort()函數(shù)使用詳解的文章就介紹到這了,更多相關(guān)Python 列表 sort()函數(shù)使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python的matplotlib繪圖如何修改背景顏色的實現(xiàn)
這篇文章主要介紹了Python的matplotlib繪圖如何修改背景顏色的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07Django零基礎(chǔ)入門之運行Django版的hello world
這篇文章主要介紹了Django零基礎(chǔ)入門之運行Django版的hello world,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09opencv+python實現(xiàn)鼠標點擊圖像,輸出該點的RGB和HSV值
這篇文章主要介紹了opencv+python實現(xiàn)鼠標點擊圖像,輸出該點的RGB和HSV值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06