前言
上一篇文章簡單地介紹了什麼是 Python 列表和對其增刪改操作,生活中我們常常還需要對列表進行排序、反轉等操作,貼心的 Python 內置了函數幫助我們實現這些操作,Great!
好了,廢話不多說,開始咯~
1. 使用方法sort()對列表進行永久性排序
Python 方法sort()
讓你能夠較爲輕鬆地對列表進行排序。
sort()語法:list.sort(key=None, reverse=False)
參數:
- key - 用於指定含一個參數的函數,該函數用於從列表中每個元素中提取比較鍵。換言之,這是用來設置列表中元素間比較規則的。默認是
None
表示直接以默認規則進行排序(單詞按首字母、數字按大小排序)。 - reverse - 排序規則,
reverse = True
降序,reverse = False
升序(默認)。
看到參數解釋後你可能會是這樣的↓
現在不理解沒關係,文中會舉例說明。
比如,你有一個汽車列表,並要讓其中的汽車按字母順序排列。你可以這樣寫:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
運行這段代碼,方法sort()
永久性地修改了列表元素的排列順序。現在汽車是按字母順序排列的,再也無法恢復到原來的排列順序,運行結果如圖1-1:
你還可以按與字母排列順序相反的順序排列列表元素。只需要向sort()
方法中傳遞參數reverse = True
即可。代碼可以這樣寫:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
因爲傳遞了參數reverse = True
,所以運行結果會和圖1-1順序相反,結果如圖1-2:
這對元素的排列改變也是永久性的。
以上演示的都是 reverse 參數,接下來講解 key 參數的使用,使用這個參數我們可以自定義排序規則。
比如,你有一個汽車列表,並要讓其中的汽車按最後一個字母排序。你可以這樣寫:
# elem指列表中的每一個元素
def last(elem):
# 返回字符串最後一個字符作爲排序比較鍵
return elem[-1]
cars = ['bmw', 'audi', 'toyota', 'subaru']
# key參數傳入的是帶有一個參數的函數名
cars.sort(key=last)
print(cars)
這段代碼很有意思,我們自定義了一個排序規則函數last
,當然,函數名可以隨便取;有一個參數elem
,事實上這個參數名也可以隨便取,指代列表中的每一個元素。last
函數中 return elem[-1]
的含義是返回列表中每個元素的最後一個字母作爲比較鍵。
程序運行時,會把列表cars
中的每一個元素當作參數傳入last
中,last
函數返回每個元素的最後一個字母進行排序。結果如圖1-3:
2. 使用函數sorted()對列表進行臨時排序
要保留列表元素原來的排列順序,同時又想對列表進行排序,可以使用函數 sorted()
。
函數 sorted()
讓你能夠按特定順序顯示列表元素,同時不影響它們在列表中的原始排列順序。
sorted()語法:sorted(iterable, key=None, reverse=False)
參數:
- iterable - 可迭代對象。列表屬於可迭代對象。
- key - 用於指定含一個參數的函數,該函數用於從列表中每個元素中提取比較鍵。換言之,這是用來設置列表中元素間比較規則的。默認是
None
表示直接以默認規則進行排序(單詞按首字母、數字按大小排序)。 - reverse - 排序規則,
reverse = True
降序,reverse = False
升序(默認)。
**返回值:**返回一個新的排序列表
還是拿汽車列表舉個栗子:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("原始列表:")
print(cars)
print("\n排序的列表:")
print(sorted(cars))
print("\n原始列表:")
print(cars)
運行這段代碼,結果如圖2-1:
我們首先打印了原始順序的列表,在按首字母順序(升序)對列表進行排序,但這種排序是臨時的,不會改變原始列表的順序,最後我們再次打印原始列表以確認列表元素的排列順序與以前相同。
和 list.sort()
方法很類似,你還可以按首字母降序排列列表元素,寫法也非常相似:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(sorted(cars, reverse=True))
運行這段代碼,你會看到結果如圖2-2所示,按首字母降序排序:
看到這裏,你可能會想sorted()
方法能不能自定義排序規則呢?
答案是肯定的,而且用法和 list.sort()
還很像。
比如,你想讓汽車列表中的汽車按第三個字母進行降序排列,你可以這樣寫代碼:
# elem指列表中的每一個元素
def third(elem):
# 返回元素的第三個字符作爲排序比較鍵
return elem[2]
cars = ['bmw', 'audi', 'toyota', 'subaru']
# key參數傳入的是帶有一個參數的函數名,reverse=True表示降序排列
print(sorted(cars, key=third, reverse=True))
我們先自定義了一個排序規則函數third
,以列表中元素的第三個字符作爲排序的比較鍵,接下來將這個函數作爲參數傳給sorted()
,因爲是降序排列,所以reverse
要設置爲True
。
運行代碼,結果如圖2-3:
sort()
和sorted()
的區別:
-
sort()
是應用在 list 上的方法,sorted()
可以對所有可迭代的對象進行排序操作。 -
list 的
sort()
方法返回的是對已經存在的列表進行操作,而內建函數sorted()
方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。
3. 反轉列表
和排序方法一樣,列表反轉也有兩個方法:list.reverse()
和reversed()
。因爲reversed()
方法涉及到迭代器,現在還不適合講解,所以本文現階段只講解 list.reverse()
。
reverse()語法: list.reverse()
沒有參數,列表可直接調用
比如,你有一個汽車列表,使用reverse()方法可輕鬆地反向排列其中的汽車:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()
print(cars)
運行結果如圖3-1:
注意: reverse()
是反轉列表元素的排列順序,而且是永久性的。但你可以隨時恢復到原來的排序順序,只要再次調用reverse()
即可。
4. 確定列表的長度
使用函數 len()
可快速獲悉列表的長度。
len()語法: list.len()
返回值: 列表長度
在下面的示例中,列表包含4個元素,因此其長度爲4:
注意: Python 計算列表元素個數時從1開始計數,返回的列表長度爲實際長度,不會差1。
結尾語
本文對列表中常見的幾個函數進行了簡單的講解,靈活運用Python內置函數對我們編寫程序幫助很大,既省時又省力,簡單實惠,何樂不爲?Python中還有大量的內置函數,以後用到了我再寫篇文章進行歸納。作爲計算機從業者,在學習時要多想、多練、多總結,這樣纔能有提高。
如果你在學習過程中有任何疑問,可以關注文章下方↓↓↓的公衆號及時與我聯繫,我們相互討論,共同學習。
最後,祝你學有所成。