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  深圳

时间: 2024-08-05 23:20:15

5.3.2 Counter对象的相关文章

Python:使用Counter进行计数统计

计数统计就是统计某一项出现的次数.实际应用中很多需求需要用到这个模型.比如测试样本中某一指出现的次数.日志分析中某一消息出现的频率等等'这种类似的需求有很多实现方法.下面就列举几条. (1)使用dict 看下面代码 #coding=utf-8 data = ['a','2',2,4,5,'2','b',4,7,'a',5,'d','a','z'] count_frq = dict() for one in data:      if one in count_frq:           cou

Java核心技术之深入理解对象的生命周期

1 总体说明 Java类的初始化 对象的创建与初始化 对象的销毁 对象的复制 2 Java类的初始化 自然界的任何生物都有个由生到死的过程. 而当源代码编译成class文件被JVM的类加载器装载到内存中后,也会经历这么一个由生到死的过程,接下来就分析Java类的初始化到底做了哪些事情.这里暂时不谈JVM将class文件装载到内存的详细细节,只是从类的五种成员来观察类的初始化 之前提到过类的五种成员,包含属性,方法,构造器,代码块以及静态代码块五个部分.其中静态代码块和静态属性(也就是static

python之Counter类:计算序列中出现次数最多的元素

Counter类:计算序列中出现次数最多的元素 1 from collections import Counter 2 3 c = Counter('abcdefaddffccef') 4 print('完整的Counter对象:', c) 5 6 a_times = c['a'] 7 print('元素a出现的次数:', a_times) 8 9 c_most = c.most_common(3) 10 print('出现次数最多的三个元素:', c_most) 11 12 times_dic

Python中Collections模块的Counter容器类使用教程

1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排序字典,是字典的子类.引入自2.7.namedtuple()函数:命名元组,是一个工厂函数.引入自2.6.Counter类:为hashable对象计数,是字典的子类.引入自2.7.deque:双向队列.引入自2.4.defaultdict:使用工厂函数创建字典,使不用考虑缺失的字典键.引入自2.

python collections.Counter笔记

Counter是dict的子类,所以它其实也是字典.只不过它的键对应的值都是计数,值可以是任意整数.下面是四种创建Counter实例的例子: >>> c = Counter() # a new, empty counter >>> c = Counter('gallahad') # a new counter from an iterable >>> c = Counter({'red': 4, 'blue': 2}) # a new counter

[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 collections.Counter 类 1. most_common(n)统计top_n from collections import Counter words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 't

python模块学习之数据结构--collections.counter

python包含非常多的标准数据结构,如list,tuple,dict 和set 都是内置类型.除了这些基本的内置类型.python的collections模块还很多种数据结构实现. collections----容器数据类型模块 python版本:2.6以及以后版本 collections模块包含除内置內型list,dict 和tuple之外的数据类型. 1.1 Counter 1.1.1 Counter作为一个容器(啥是容器呢,能装入不同的对象就是容器),可以跟踪相同数据的次数. 初始化输入

python -- Counter 类

python -- Counter 类 我明白你会来,所以我等 参考 官方文档 class collections.Counter([iterable-or-mapping]) Counter 集成于 dict 类,因此也可以使用字典的方法,此类返回一个以元素为 key .元素个数为 value 的 Counter 对象集合 >>> from collections import Counter >>> s = "hello pinsily" >

collections模块—— Counter

collections模块-- Counter Counter目的是用来跟踪值出现的次数.它是一个无序的容器类型,以字典的形式存储,其中元素作为key,其计数作为value. 计数值可以是任意的lnterger(包括0和负数). Counter类和其他的bags或multisets很相似. 创建 下面的代码说明了Counter类创建的四种方法: Counter类的创建: from collections import Counter c = Counter()#创建一个空的Counter c =