Python Counter()计数工具

Python的collections.Counter()工具用于统计元素出现的次数,特别适用于文件中单词频率分析等场景。通过传入迭代对象或字典,Counter返回一个映射结果,展示各元素的计数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

collections.Counter([iterable-or-mapping])用于统计各元素的计数,结果为map,可选的参数为迭代对象或字典map。

>>> c2=Counter('banana') #创建字符串的Counter对象
>>> c2
Counter({'a': 3, 'n': 2, 'b': 1})
>>> c2=Counter({'a':2,'b':3}) 
>>> c2
Counter({'b': 3, 'a': 2})
>>> c3=Counter(a=3,b=5) #创建关键字参数的Counter对象
>>> c3
Counter({'b': 5, 'a': 3})
>>> c3['b']  #访问Counter对象的键
5
>>> c3['aa'] #如果键值不存在,返回0
0
>>> c3.elements #返回列表元素
<bound method Counter.elements of Counter({'b': 5, 'a': 3})>  
most_common(n) #返回计数值中最大的n个元素的元组
>>> c1.most_common(5)
[('asdf', 6), ('asd', 5), ('sadf', 3), ('df', 3), ('aa', 3)]
# subtract([iterable-or-mapping]) counter按照相应的元素,计数相减
>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> d = Counter(a=1, b=2, c=3, d=4)
>>> c.subtract(d)
>>> c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
# update([iterable-or-mapping]) 不同于字典的update方法,这里更新counter时,相同的key的value值相加而不是覆盖

# Counter 间的数学集合操作
>>> c = Counter(a=3, b=1, c=5)
>>> d = Counter(a=1, b=2, d=4)
>>> c + d                       # counter相加, 相同的key的value相加
Counter({'c': 5, 'a': 4, 'd': 4, 'b': 3})
>>> c - d                       # counter相减, 相同的key的value相减,只保留正值得value
Counter({'c': 5, 'a': 2})
>>> c & d                       # 交集:  取两者都有的key,value取小的那一个
Counter({'a': 1, 'b': 1})
>>> c | d                       # 并集:  汇聚所有的key, key相同的情况下,取大的value
Counter({'c': 5, 'd': 4, 'a': 3, 'b': 2})

常见做法:
sum(c.values())                 # 继承自字典的.values()方法返回values的列表,再求和
c.clear()                       # 继承自字典的.clear()方法,清空counter
list(c)                         # 返回key组成的list
set(c)                          # 返回key组成的set
dict(c)                         # 转化成字典
c.items()                       # 转化成(元素,计数值)组成的列表
Counter(dict(list_of_pairs))    # 从(元素,计数值)组成的列表转化成Counter
c.most_common()[:-n-1:-1]       # 最小n个计数的(元素,计数值)组成的列表
c += Counter()                  # 利用counter的相加来去除负值和0的值

举个计数的例子,需要统计一个文件中,每个单词出现的次数。实现方法如下:

from collections import *
import re
with open('test.txt') as f:
    words=re.findall(r'\w+',f.read().lower())
    c=Counter(words)
    print(c)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值