collections.Counter 是计数器容器,用于统计可哈希对象的频率,支持字典操作、集合运算和排序。
创建 Counter
1
2
3
4
5
6
7
| from collections import Counter
# 从列表
Counter(["a", "b", "c", "a", "b", "a"]) # Counter({'a': 3, 'b': 2, 'c': 1})
# 从字符串
Counter("abracadabra") # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
|
访问与更新
1
2
3
4
5
| counter['a'] # 5
counter['z'] # 0(不存在返回 0,不抛 KeyError)
counter.update("aaa") # 增加计数
counter.subtract('aaa') # 减少计数
|
核心方法
| 方法 | 说明 |
|---|
most_common(n) | 返回频率最高的 n 个元素 |
update() | 增加计数 |
subtract() | 减少计数 |
elements() | 返回所有元素的迭代器 |
1
| counter.most_common(2) # [('a', 5), ('b', 2)]
|
集合运算
1
2
3
4
5
6
7
| c1 = Counter("abcd")
c2 = Counter("dcbaabcd")
c1 + c2 # 相加: Counter({'a': 3, 'b': 3, 'c': 3, 'd': 3})
c2 - c1 # 相减: Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1})
c1 & c2 # 交集(取最小): Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1})
c1 | c2 # 并集(取最大): Counter({'a': 2, 'b': 2, 'c': 2, 'd': 2})
|
与 dict 的区别
| 特性 | Counter | dict |
|---|
| 访问不存在的键 | 返回 0 | 抛出 KeyError |
| 数学运算 | 支持 | 不支持 |
| most_common | 支持 | 需排序实现 |
典型应用
1
2
3
4
5
6
7
| # 词频统计
words = "the quick brown fox jumps over the lazy dog".split()
Counter(words).most_common(3)
# 字母异位词判断
def is_anagram(s1, s2):
return Counter(s1) == Counter(s2)
|
Comments