python學習10.03:Python list經常使用方法(count、index、pop、reverse和sort)

除前面章節介紹的增長元素、刪除元素、修改元素方法以外,列表還包含了一些經常使用的方法。

例如,在交互式解釋器中輸入 dir(list) 便可看到列表包含的全部方法,以下所示:python

>>> dir(list)
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>

在上面輸出結果中己經剔除了那些以雙下畫線開頭的方法。按照約定,這些方法都具備特殊的意義,不但願被用戶直接調用。

上面有些方法前面己經介紹過了,接下來給你們介紹另外的一些經常使用方法。編程

count()方法

此方法用於統計列表中某個元素出現的次數,其基本語法格式爲:數據結構

listname.count(obj)app

其中,listname 表明列表名,obj 表示判斷是否存在的元素。

下面代碼示範了 count() 方法的用法:編程語言

a_list = [2, 30, 'a', [5, 30], 30]
# 計算列表中30的出現次數
print(a_list.count(30))
# 計算列表中[5, 30]的出現次數
print(a_list.count([5, 30]))

運行結果爲:函數

2
1

index()用法

index() 方法用於定位某個元素在列表中出現的位置(也就是索引),若是該元素沒有出現,則會引起 ValueError 錯誤。

此方法的基本語法格式爲:編碼

listname.index(obj,start,end)spa

同 count() 方法不一樣,index() 方法還可傳入 start、end 參數,用於在列表的指定範圍內搜索元素。

以下代碼示範了 index() 方法的用法:.net

a_list = [2, 30, 'a', 'b', 'crazyit', 30]
# 定位元素30的出現位置
print(a_list.index(30))
# 從索引2處開始、定位元素30的出現位置
print(a_list.index(30, 2))
# 從索引2處到索引4處之間定位元素30的出現位置,由於找不到該元素,會引起 ValueError 錯誤
print(a_list.index(30, 2, 4))

運行結果爲:code

1
5
Traceback (most recent call last):
  File "C:\Users\mengma\Desktop\1.py", line 7, in <module>
    print(a_list.index(30, 2, 4)) # ValueError
ValueError: 30 is not in list

pop()用法

pop() 方法會移除列表中指定索引處的元素,並返回該元素,若是不指定索引,默認會移除列表中最後一個元素。該方法的基本語法格式爲:

listname.pop(index)

例如:

a_list=[1, 2, 3, 9, 'hello']
# 移除列表的元素 3
print(a_list.pop())
print(a_list)
# 移除列表中索引爲 0 的元素1
print(a_list.pop(0))
print(a_list)
# 變量x01獲取移除的元素
x01 = a_list.pop(1)
print(a_list)

運行結果爲:

hello
[1, 2, 3, 9]
1
[2, 3, 9]
[2, 9]


注意,使用 pop() 方法能夠實現一種常見的數據結構——棧。棧是一種特殊的數據結構,它可實現先入後出(FILO)功能,即先加入棧的元素,反然後出棧。

在其餘編程語言所實現的「棧」中,每每會提供一個 push() 方法,用於實現入棧操做,但 Python 的列表並無提供 push() 方法,咱們可使用 append() 方法來代替 push() 方法實現入棧操做。

下面代碼示範了使用列表做爲「棧」的示例:

stack = []
# 向棧中「入棧」3個元素
stack.append("fkit")
stack.append("crazyit")
stack.append("Charlie")
print(stack) # ['fkit', 'crazyit', 'Charlie']
# 第一次出棧:最後入棧的元素被移出棧
print(stack.pop())
print(stack) # ['fkit', 'crazyit']
# 再次出棧
print(stack.pop())
print(stack) # ['fkit']

運行結果爲:

['fkit', 'crazyit', 'Charlie']
Charlie
['fkit', 'crazyit']
crazyit
['fkit']

上面程序中,第 8 行實現了第一次出棧操做,該操做將會把最後一次添加的元素移出棧,且該方法會返回出棧的元素。所以,執行這行代碼將會看到輸出 Charlie。

與全部編程語言相似的是,出棧操做既會移出列表的最後一個元素,也會返回被移出的元素。

reverse()用法

reverse() 方法會將列表中全部元素反向存放。該方法的基本語法格式爲:

listname.reverse()

例如:

a_list = list(range(1, 8))
# 將a_list列表元素反轉
a_list.reverse()
print(a_list)

運行結果爲:

[7, 6, 5, 4, 3, 2, 1]

從上面的運行結果能夠看出,調用 reverse() 方法將反轉列表中的全部元素。

sort()用法

sort() 方法用於對列表元素進行排序,排序後原列表中的元素順序會方發生改變。sort() 方法的語法格式以下:

listname.sort(key=None, reserse=False)

能夠看到,和其餘方法不一樣,此方法中多了 2 個參數,它們的做用分別是:

  • key 參數用於指定從每一個元素中提取一個用於比較的鍵。例如,使用此方法時設置 key=str.lower 表示在排序時不區分字母大小寫。
  • reverse 參數用於設置是否須要反轉排序,默認 False 表示從小到大排序;若是將該參數設爲 True,將會改成從大到小排序。


例如以下代碼:

a_list = [3, 4, -2, -30, 14, 9.3, 3.4]
# 對列表元素排序
a_list.sort()
print(a_list)
b_list = ['Python', 'Swift', 'Ruby', 'Go', 'Kotlin', 'Erlang']
# 對列表元素排序:默認按字符串包含的字符的編碼大小比較
b_list.sort()
print(b_list) # ['Erlang', 'Go', 'Kotlin', 'Python', 'Ruby', 'Swift']

運行結果爲:

[-30, -2, 3, 3.4, 4, 9.3, 14]
['Erlang', 'Go', 'Kotlin', 'Python', 'Ruby', 'Swift']


以下代碼示範了 key 和 reverse 參數的用法:

b_list = ['Python', 'Swift', 'Ruby', 'Go', 'Kotlin', 'Erlang']
# 指定key爲len,指定使用len函數對集合元素生成比較的鍵,也就是按字符串的長度比較大小
b_list.sort(key=len)
print(b_list)
# 指定反向排序
b_list.sort(key=len, reverse=True)
print(b_list)

運行結果爲:

['Go', 'Ruby', 'Swift', 'Python', 'Kotlin', 'Erlang']
['Python', 'Kotlin', 'Erlang', 'Swift', 'Ruby', 'Go']

上面兩次排序時都將 key 參數指定爲 len,這意味着程序將會使用 len() 函數對集合元素生成比較大小的鍵,即根據集合元素的字符串長度比較大小。

注意,採用 sort() 方法對列表進行排序時,對中文支持很差,其排序結果與經常使用的音序排序法或者筆畫排序法都不一致,所以,若是須要實現對中文內容的列表排序,還須要從新編寫相應的方法進行處理,而不能直接使用 sort() 方法。

除此以外,須要指出的是,在 Python 2.x 中,列表的 sort() 方法還可傳入一個比較大小的函數,該函數負責比較列表元素的大小。該函數包含兩個參數,當該函數返回正整數時,表明該函數的第一個參數大於第二個參數;當該函數返回負整數時,表明該函數的第一個參數小於第二個參數;返回 0,則意味着兩個參數相等。

相關文章
相關標籤/搜索