Python組織列表(51)

在你創建的列表中元素的排列順序常常是無法預測的,因為你并非總能控制用戶提供數據的順序。這雖然在大多數情況下都是不可避免的,但你經常需要以特定的順序呈現信息。有時候,你希望保留列表元素最初的排列順序,而有時又需要調整排列順序。python提供了很多組織列表的方式,可根據具體情況選用。

python大大的圖

圖片發自簡書App

我的圖

圖片發自簡書App

1.使用方法sort()對列表進行永久性排序

sort()默認按照升序進行排序。先排每個元素的第一位,如果第一位相同,再排第二位。純數字和純字母都這么排,如果數字和字母混在一起,先數字后字母

圖片發自簡書App
圖片發自簡書App

其實sort()這個函數不僅僅可以按升序排序。我們來看看它的原型:

sort(fun,key,reverse=False)

參數fun是表明此sort函數是基于何種算法進行排序的,一般默認情況下python中用的是歸并排序,并且一般情況下我們是不會重寫此參數的,所以基本可以忽略;

參數key用來指定一個函數,此函數在每次元素比較時被調用,此函數代表排序的規則,也就是你按照什么規則對你的序列進行排序;

參數reverse是用來表明是否逆序,默認的False情況下是按照升序的規則進行排序的,當reverse=True時,便會按照降序進行排序。

下面用key來寫一個低配函數來了解一下sort的排序功能有多強大

圖片發自簡書App

key可以寫成不同的表達式,通常是lambda,當然也可以事先人為定義一個函數。lambda后面可以寫正則表達式,實現很復雜的排序。

2.使用函數sorted()對列表進行臨時排序

要保留列表元素原來的排列順序,同時以特定的順序呈現它們,可使用函數sorted(),函數sorted()讓你能夠按特定的順序顯示列表元素,同時不影響它們在列表中的原始排列順序。

sorted()的原型為:

sorted(iterable,cmp=None,key=None,reverse=False)

iterable是可迭代對象,可以是字符串,列表,字典,元組。

cmp不怎么用,因為key和reverse比單獨一個cmp效率要高。

key和前面的key一樣,可以讓這個函數有非常花的排序方式。

reverse也是和前面一樣,決定可迭代對象要不要降序的一個關鍵參數。

sorted() 和list.sort() 都接受key, reverse定制。但是區別是:list.sort()是列表中的方法,只能用于列表。而sorted可以用于任何可迭代的對象。list.sort()是在原序列上進行修改,不會產生新的序列。所以如果你不需要舊的序列,可以選擇list.sort()。 sorted() 會返回一個新的序列。舊的對象依然存在。

這里需要解釋一下大大代碼里的第10行,即第4個print。我們知道sort()是對代碼永久排序,那么在前兩個print之后,這個列表已經被永久的修改成了第二個print的結果。此時,第三個print是對列表臨時升序排列,暫時改變了列表的樣子,但是列表并沒有被它改變,緊接著第四個print就證明了列表并沒有被sorted()改變。

這個章節有一個注意說大寫字母排序得到的順序可能不準確。我試了一下,沒有影響啊,可能沒有遇到特例吧。如果真的受影響,可以考慮用函數lower()把字母全都轉為小寫再排序。

圖片發自簡書App
圖片發自簡書App
圖片發自簡書App

3.倒著打印列表

要反轉列表元素的排列順序,可使用方法reverse()。注意:reverse()并不是指按與字母順序相反的順序排列列表元素,而只是反轉列表元素的排列順序。方法reverse()永久性的修改列表元素的排列順序,但可隨時恢復到原來的排列順序,為此只需對列表再次調用reverse()即可。

由此看來,reverse()和sort(reverse=True)的區別就很明顯了。reverse()是反轉列表元素的排列順序,而sort(reverse=True)是把列表元素按字母降序排列。單獨拿出來再看一下就知道了。

圖片發自簡書App
圖片發自簡書App

4.確定列表長度

這個len()我們已經用過很多次了,用在for循環里的range(len(list))。使用函數len()可以快速獲悉列表長度。python計算列表元素時從1開始,而不是從0開始。因此確定列表長度時,你應該不會遇到差一錯誤。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容