count() 是 Python 列表內建方法,用於統計指定元素在列表中出現的次數。語法簡單、效能優異,是資料分析、去重驗證、頻率統計等場合的常用工具。
list.count(obj)
== 比較)回傳 整數,表示 obj 在列表中出現的次數。若不存在則回傳 0。
#!/usr/bin/python
aList = [123, 'xyz', 'zara', 'abc', 123]
print("Count for 123 :", aList.count(123)) # 2
print("Count for zara :", aList.count('zara')) # 1
print("Count for 999 :", aList.count(999)) # 0(不存在)
== 比較,1 == 1.0 為 True,但 '1' == 1 為 Falselst = [1, 2, 3, 2, 4, 3, 5, 2]
duplicates = [x for x in set(lst) if lst.count(x) > 1]
print(duplicates) # [2, 3]
# 方法一:使用 count()(適合小列表)
lst = ['a', 'b', 'a', 'c', 'b', 'a']
freq = {x: lst.count(x) for x in set(lst)}
print(freq) # {'a': 3, 'b': 2, 'c': 1}
# 方法二:使用 collections.Counter(大列表推薦,O(n) 一遍掃描)
from collections import Counter
freq = Counter(lst)
print(freq) # Counter({'a': 3, 'b': 2, 'c': 1})
def has_duplicates(lst):
return any(lst.count(x) > 1 for x in set(lst))
print(has_duplicates([1,2,3])) # False
print(has_duplicates([1,2,2,3])) # True
matrix = [[1,2], [3,1], [1,4]]
# 統計子列表 [1,2] 出現次數
print(matrix.count([1,2])) # 1
# 統計數字 1 在所有子列表中總出現次數
total = sum(sublist.count(1) for sublist in matrix)
print(total) # 3
| 方法 | 時間複雜度 | 適用場景 | 備註 |
|---|---|---|---|
| list.count(x) | O(n) | 單一元素統計、小列表 | 每次呼叫掃描全列表 |
| collections.Counter | O(n) | 全元素頻率統計、大列表 | 一次掃描建立所有計數 |
| dict 手動累加 | O(n) | 自訂邏輯、串流處理 | 單次遍歷,記憶體效率佳 |
| pandas.value_counts() | O(n) | 資料分析、大型資料集 | 需安裝 pandas,功能最豐富 |
# 陷阱 1:列表裡有列表,count() 比較的是引用/內容?
lst = [[1], [1], [2]]
print(lst.count([1])) # 2(內容相等即視為相同)
# 陷阱 2:可變物件做為元素時修改會影響統計
a = [1, 2]
lst = [a, a, [1,2]]
print(lst.count([1,2])) # 3
a.append(3)
print(lst.count([1,2])) # 0(內容已變!)
print(lst.count([1,2,3])) # 2
count() 是統計列表中特定元素出現次數的標準方法,語法為 list.count(obj),回傳整數計數。適合單一元素查詢、小規模列表;大量統計或頻率分析建議改用 collections.Counter。理解其精確匹配規則、時間複雜度與可變物件陷阱,能正確應用於資料驗證、去重、頻率分析等實務場景。