HOWTO · Python

Python 中計算列表中元素的數量

本教程演示瞭如何在 Python 中對列表中的元素進行計數。

本頁內容

「計算列表中的元素數」可能代表三種不同的任務,而 Python 為每一種都提供了直接的工具。需要取得項目總數時使用 len(),需要計算單一值出現的次數時使用 list.count(),需要一次取得每個值的頻率時使用 collections 模組中的 Counter。以迴圈搭配字典手動計算也能建立相同的頻率結果,並清楚展示計數的運作方式。本教學將透過可執行的範例逐一介紹每種方法,讓你挑選符合任務需求的做法。

使用 len() 取得項目總數

內建的 len() 函式會回傳列表中頂層項目的數量。它適用於任何元素型別——數字、字串、布林值,甚至是其他列表——因為它量測的是列表本身,而不是其中的值。

執行以下範例:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

items = [10, "apple", 3.14, [1, 2, 3]]

print(len(items))
4

這個列表包含四個項目:一個整數、一個字串、一個浮點數和一個巢狀列表。len() 回傳 4,因為巢狀列表 [1, 2, 3] 在外層只算一個項目。如果需要計入巢狀列表內部的項目,請先將結構展平,或分別加總內層列表的長度——len() 絕不會深入頂層以外。

使用 list.count() 計算單一值出現的次數

list.count() 方法會回傳指定值在列表中出現的次數。傳入你要尋找的值,它就會為你掃描整個列表:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

my_list = [1, 2, 3, 2, 1, 4, 2]

print(my_list.count(2))
print(my_list.count(9))
3
0

值 2 出現了三次,而 9 從未出現,因此第二次呼叫回傳 0。list.count() 適用於列表所能容納的任何元素型別,包括字串和混合型別的資料。

請留意兩項限制。每次呼叫只回答關於單一值的問題,因此計算三個不同的值需要三次個別呼叫——若要取得完整的頻率分布,請改用 Counter 或迴圈。此外,在巢狀列表中,list.count() 只會比對與傳入值相等的完整項目;存放在巢狀列表內部的值不會被看到,除非你先將列表展平。

使用 Counter 計算每個值的次數

collections 模組中的 Counter 類別只需一次走訪就能為每個值建立頻率對應表。它的行為就像一個把每個元素對應到其次數的字典:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

from collections import Counter

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = Counter(my_list)

print(element_count)
print(element_count[2])
print(element_count[9])
Counter({2: 3, 1: 2, 3: 1, 4: 1})
3
0

對 Counter 取索引的方式與字典相同,但有一個實用的差異:讀取從未計數過的鍵會回傳 0,而不是引發錯誤,因此 element_count[9] 可以安全地印出 0。

由於每個值在內部都會成為字典的鍵,所有元素都必須是可雜湊的。整數、字串和元組都符合條件;巢狀列表則不符合。對於包含不可雜湊項目的列表,請先將項目轉換為可雜湊的形式,或改用其他方式計數。

使用迴圈建立頻率字典

一般的迴圈搭配字典也能產生相同的頻率,並讓運作機制一目瞭然。先初始化一個字典,然後在走訪列表時為每個元素遞增計數:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = {}

for element in my_list:
    if element in element_count:
        element_count[element] += 1
    else:
        element_count[element] = 1

print(element_count)
{1: 2, 2: 3, 3: 1, 4: 1}

結果會將每個值對應到其次數:2 出現三次,1 出現兩次,3 和 4 各出現一次。這個模式只需走訪列表一次,並讓你完全掌控——你可以在計數前轉換每個元素、跳過選定的值,或累積單純計數以外的結果。同樣的可雜湊限制也適用:每個元素都會成為字典的鍵,因此像巢狀列表這類不可雜湊的項目必須先轉換或展平。

要在這些工具之間做選擇,請讓方法對應你的問題。需要項目總數時使用 len(),需要計算單一值時使用 list.count(),需要完整頻率對應表時使用 Counter 或字典迴圈。