5.3.2 Counter对象
Counter类提供一个方便和快速统计的工具。
例子:
#python 3.4
import collections
cnt = collections.Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
cnt[word] += 1
print(cnt)
结果输出如下:
Counter({'blue': 3, 'red': 2, 'green': 1})
从这个例子里可以看到,对单词进行统计,不需要分别记住不同单词进行增加,只调用一个简单的动作,就可以完成了。
class collections.Counter([iterable-or-mapping])
Counter类是继承字典类,并且基于HASH保存。因而它是不排序的容器,把元素当作键,而把计数当作键值。计数的数值是整数,可以是0和负数。
创建一个Counter对象时,可以从迭代对象里创建,也可以从一个映射对象,或者Counter对象创建。
例子:
#python 3.4
import collections
cnt = collections.Counter()
print(cnt)
cnt = collections.Counter('this is for test')
print(cnt)
cnt = collections.Counter({'red': 4, 'blue': 2})
print(cnt)
cnt = collections.Counter(cats = 4, dogs = 10)
print(cnt)
结果输出如下:
Counter()
Counter({'t': 3, 's': 3, ' ': 3, 'i': 2, 'r': 1, 'f': 1, 'h': 1, 'o': 1, 'e': 1})
Counter({'red': 4, 'blue': 2})
Counter({'dogs': 10, 'cats': 4})
在使用Counter对象时要注意两点:1. 当访问一个不存在的元素时,它返回0值,而不是抛出异常。2. 设置一个元素为0值,并不是把这个元素删除,而需要调用del来把元素删除。
例子:
#python 3.4
import collections
cnt = collections.Counter({'red': 4, 'blue': 2})
print(cnt)
print(cnt['white'])
cnt['red'] = 0
print(cnt)
print('开始删除:')
del cnt['red']
print(cnt)
结果输出如下:
Counter({'red': 4, 'blue': 2})
0
Counter({'blue': 2, 'red': 0})
开始删除:
Counter({'blue': 2})
Counter类除了支持字典类所有方法外,还增加下面三个方法:
elements()
返回一个迭代器,按每个元素的统计的次数来返回多少次这个元素的值。元素返回的顺序是随机的,并且当元素统计的值为0时不输出此元素。
例子:
#python 3.4
import collections
cnt = collections.Counter(a=4, b=2, c=0, d=-2)
print(cnt)
print(list(cnt.elements()))
结果输出如下:
Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2})
['a', 'a', 'a', 'a', 'b', 'b']
most_common([n])
返回统计频率最高的前n个元素。如果n没有指定,就返回所有元素。返回的顺序会是从大到小的顺序。
例子:
#python 3.4
import collections
cnt = collections.Counter(a=4, b=2, c=0, d=-2)
print(cnt)
print(cnt.most_common(2))
结果输出如下:
Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2})
[('a', 4), ('b', 2)]
subtract([iterable-or-mapping])
Counter元素与另外一个迭代对象或映射对象进行相同元素相减的操作。
例子:
#python 3.4
import collections
cnt1 = collections.Counter(a=4, b=2, c=0, d=-2)
cnt2 = collections.Counter(a=1, b=2, c=3, d=4)
print(cnt1)
print(cnt2)
cnt1.subtract(cnt2)
print(cnt1)
结果输出如下:
Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2})
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
fromkeys(iterable)
这个方法在 Counter对象没有实现。
update([iterable-or-mapping])
从一个迭代器或者另一个映射对象里添加元素的统计值。
例子:
#python 3.4
import collections
cnt1 = collections.Counter(a=4, b=2, c=0, d=-2)
cnt2 = collections.Counter(a=1, b=2, c=3, d=4)
print(cnt1)
print(cnt2)
cnt1.update(cnt2)
print(cnt1)
结果输出如下:
Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2})
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2})
对Counter对象进行一些公共的操作:
sum(c.values()) # 计算所有计数。
c.clear() # 复位所有计数。
list(c) # 生成列表
set(c) # 生成集合
dict(c) # 生成普通字典
c.items() # 返回(elem, cnt)对的列表
Counter(dict(list_of_pairs)) # 从(elem, cnt)的列表创建Counter
c.most_common()[:-n-1:-1] # n个最常用元素返回
+c # 删除0和负数计数
Counter对象的算术运算:
#python 3.4
import collections
cnt1 = collections.Counter(a=4, b=2, c=0, d=-2)
cnt2 = collections.Counter(a=1, b=2, c=3, d=4)
print(cnt1)
print(cnt2)
print('cnt1 + cnt2:', cnt1 + cnt2)
print('cnt1 - cnt2:', cnt1 - cnt2)
print('cnt1 & cnt2:', cnt1 & cnt2)
print('cnt1 | cnt2:', cnt1 | cnt2)
print('+cnt1:', +cnt1)
print('-cnt1:', -cnt1)
结果输出如下:
Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2})
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
cnt1 + cnt2: Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2})
cnt1 - cnt2: Counter({'a': 3})
cnt1 & cnt2: Counter({'b': 2, 'a': 1})
cnt1 | cnt2: Counter({'d': 4, 'a': 4, 'c': 3, 'b': 2})
+cnt1: Counter({'a': 4, 'b': 2})
-cnt1: Counter({'d': 2})
蔡军生 QQ;9073204 深圳
5.3.2 Counter对象相关推荐
- Python标准库——collections模块的Counter类
更多16 最近在看一本名叫<Python Algorithm: Mastering Basic Algorithms in the Python Language>的书,刚好看到提到这个C ...
- python库整理: Collections.Counter
Counter目的是用来跟踪值出现的次数. 它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value. #导入库: from collections import Co ...
- JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】
文章目录 思维导图 概述 如何判断对象为垃圾对象 对象的存活还是死亡 判断对象死亡的算法一:引用计数算法Reference Counting 原理 示意图 优点 缺点 实验 判断对象死亡的算法一:可达 ...
- python基础教程:Counter类
Counter类的目的是用来跟踪值出现的次数.它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value.计数值可以是任意的Interger(包括0和负数).Counte ...
- python中统计计数的几种方法和Counter的介绍
1使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b', ...
- 【Python基础】Python之collections库-Counter
一.模块概述 1.模块作用 官方说法:collections模块实现了特定目标的容器,以提供Python标准内建容器dict ,list , set , 和tuple的替代选择. 通俗说法:Pytho ...
- Python标准库collections模块的Counter类
collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排 ...
- python中counter_Python collections模块中counter()的详细说明,Pythoncollections,之,Counter,详解...
collections模块 ==> Python标准库,数据结构常用的模块:collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提 ...
- python中怎么计数_浅谈python中统计计数的几种方法和Counter详解
1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...
- python counter_教你Python的collections.Counter类型
collections.Counter 类型可以用来给可散列的对象计数,或者是当成多重集合来使用 -- 多重集合就是集合里的元素可以出现多次1. collections.Counter 类型类似于其它 ...
最新文章
- Speed4Web 绿色纯净版
- 真香!Vision Transformer 快速实现 Mnist 识别
- Redux源码浅析系列(一):`CreateStore`
- ASP.NET State Service
- python 第3课 数据类型之list
- TP-LINK821N无线网卡拆解分析
- python新手入门-python新手入门方法
- 鸢尾花识别问题,萼片有什么用?
- Java使用多线程发送消息
- ISTQB高级国际认证试题及答案(一)
- 通过社交网络进行OWIN OAuth2身份验证
- Oracle的where子句
- 普通人如何快速翻身?
- BFS和DFS的java实现
- 移动端html页面显示图表,HTML5移动端数据图表组件调研
- Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD
- Tensorflow 笔记 Ⅳ——mnist手写数字识别
- 【Python】监控GPU温度
- 解决小程序view之间默认的空隙
- 【矩阵计算】QR分解-基于Householder变换