Counter是Python标准库collections模块提供的专门用于计数的类,它继承了字典的特性,能够高效地统计可迭代对象中各个元素的出现频次,避免了手动编写循环计数的繁琐逻辑。在实际开发中,Counter的使用主要围绕两种核心用法展开,分别对应不同的使用场景。

第一种用法:直接传入可迭代对象完成计数
这是Counter最基础的用法,只需要将列表、字符串、元组等可迭代对象作为参数传入Counter的构造函数,就可以直接得到每个元素的出现次数统计结果。统计结果是一个类似字典的对象,键为元素值,值为该元素出现的次数。
这种用法适合需要快速统计一批数据中元素频次的场景,比如统计一段文本中每个字符的出现次数,或者统计列表中各个元素的出现情况。
下面是具体的代码示例:
from collections import Counter
# 统计列表中元素的出现次数
data_list = [1, 2, 3, 2, 1, 4, 2, 5, 1]
counter_obj = Counter(data_list)
print(counter_obj) # 输出Counter({1: 3, 2: 3, 3: 1, 4: 1, 5: 1})
# 统计字符串中字符的出现次数
text = "hello world"
char_counter = Counter(text)
print(char_counter) # 输出Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
第二种用法:通过update方法增量更新计数
如果已经有一个Counter对象,还需要统计新的可迭代对象中的元素,或者需要合并多个数据集的计数结果,就可以使用update方法。update方法不会覆盖原有的计数结果,而是会将新统计的元素频次和原有结果累加。
这种用法适合需要分批次处理数据、逐步累加计数的场景,比如处理大文件时逐行统计元素频次,或者合并多个来源的统计数据。
下面是具体的代码示例:
from collections import Counter
# 初始化第一个Counter对象
first_counter = Counter([1, 2, 2, 3])
print("初始计数结果:", first_counter) # 输出初始计数结果: Counter({2: 2, 1: 1, 3: 1})
# 使用update方法更新计数,新增可迭代对象为[2,3,3,4]
first_counter.update([2, 3, 3, 4])
print("更新后的计数结果:", first_counter) # 输出更新后的计数结果: Counter({2: 3, 3: 3, 1: 1, 4: 1})
# 也可以直接传入另一个Counter对象进行合并
second_counter = Counter([3, 4, 4, 5])
first_counter.update(second_counter)
print("合并后的计数结果:", first_counter) # 输出合并后的计数结果: Counter({3: 4, 4: 3, 2: 3, 1: 1, 5: 1})
两种用法的对比与适用场景
两种用法的核心区别在于使用阶段和适用场景:
- 直接传入可迭代对象的用法适合一次性完成全部数据的计数,代码更简洁,适合数据量不大、可以一次性加载到内存的场景。
- update方法适合分批次处理数据,或者需要合并多个计数结果的场景,能够灵活应对动态新增的统计数据,避免重复创建Counter对象。
除了这两种核心用法,Counter还提供了很多实用的方法,比如most_common(n)可以获取出现次数最多的前n个元素,elements()可以返回所有元素的展开迭代器等,开发者可以根据实际需求灵活搭配使用。
CounterPythoncollections计数统计修改时间:2026-07-18 01:18:20