概述
统计字符出现次数类Counter
目录
- 统计字符出现次数类Counter
- 1.概述
- 2.Counter类
- 2.1.Counter类介绍
- 2.2.Counter类统计示例
- 2.3.Counter类方法
- 1.创建Counter对象
- 2.查询元素
- 3.更新元素
- 3.Counter统计日志
1.概述
当我们的业务中需要做统计工作时可以先考虑下python标准库中collections模块提供的Counter类,该类可以对可哈希对象次数进行统计。
2.Counter类
2.1.Counter类介绍
-
collections在python官方文档中的解释是High-performance container datatypes,直接的中文翻译解释高性能容量数据类型,该模块下主要包含了如下的类:
- _OrderedDictKeysView
- _OrderedDictItemsView
- _OrderedDictValuesView
- _Link
- OrderedDict
- Counter
- ChainMap
- UserDict
- UserList
- UserString
-
Counter类是dict的子类,它只能用于计算可散列(可哈希)对象的次数。
-
什么是可散列对象那,就是集合中的可哈希对象,通过调用hash(被测试对象)返回值为true则该对象就是可哈希对象,哪些是可哈希对象那?
- 所有不可变内置类型,都是可哈希的,比如str、int 、tuple 、frozenset
- 所有可变内置类型,都是不可哈希的,比如dict、list 、set
- 对于不可变容器类型,仅当他所有成员都不可变时,他自身才是可哈希的。
- 用户定义的类型默认都是可哈希的。
2.2.Counter类统计示例
统计一个列表中每个单词出现的次数,下面使用常规的方式实现了功能。
#统计词频
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
result = {}
for color in colors:
if result.get(color)==None:
result[color]=1
else:
result[color]+=1
print (result)
#{'red': 2, 'blue': 3, 'green': 1}
如果使用Counter类来统计单词出现次数会变得更简单。
from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
c = Counter(colors)
print (dict(c))
2.3.Counter类方法
1.创建Counter对象
# 创建无参Counter对象
cnt = Counter()
# 传进字符串
c1 = Counter('gallahad')
print(c1)
# 传进字典
c2 = Counter({'red': 4, 'blue': 2})
print(c2)
# 传进元组
c3 = Counter(cats=4, dogs=8)
print(c3)
2.查询元素
# 查询的元素不存在返回0
print(c2['black'])
# 查询所有元素:elements(),返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它
c = Counter(a=4, b=2, c=0, d=-2)
list(c.elements())
#['a', 'a', 'a', 'a', 'b', 'b']
# 查看最常见出现的n个元素,返回一个列表,包含counter中n个最大数目的元素
Counter('abracadabra').most_common(3)
#[('a', 5), ('r', 2), ('b', 2)]
3.更新元素
c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
c + d # 相加
#Counter({'a': 4, 'b': 3})
c - d # 相减,如果小于等于0,删去
#Counter({'a': 2})
c & d # 求最小
#Counter({'a': 1, 'b': 1})
c | d # 求最大
#Counter({'a': 3, 'b': 2})
3.Counter统计日志
from collections import Counter
lines = open("./data/input.txt","r").read().splitlines()
lines = [lines[i].split(" ") for i in range(len(lines))]
words = []
for line in lines:
words.extend(line)
result = Counter(words)
print (result.most_common(10))
当需要统计的文件比较大,使用read()一次读不完的情况:
from collections import Counter
result = Counter()
with open("./data/input.txt","r") as f:
while True:
lines = f.read(1024).splitlines()
if lines==[]:
break
lines = [lines[i].split(" ") for i in range(len(lines))]
words = []
for line in lines:
words.extend(line)
tmp = Counter(words)
result+=tmp
print (result.most_common(10))
最后
以上就是痴情大船为你收集整理的统计字符出现次数类Counter统计字符出现次数类Counter的全部内容,希望文章能够帮你解决统计字符出现次数类Counter统计字符出现次数类Counter所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复