Python统计可散列的对象之容器Counter详解

 更新时间:2021年05月18日 10:31:49   作者:李元静  
Counter是一个容器,可以跟踪等效值增加的次数.这个类可以用来实现其他语言中常用包或多集合数据结构实现的算法.本篇文章非常详细的介绍了容器Counter的使用方式,需要的朋友可以参考下

一、初始化Counter

Counter支持3种形式的初始化,比如提供一个数组,一个字典,或单独键值对“=”式赋值。具体初始化的代码如下所示:

import collections

a = collections.Counter(['a', 'a', 'b', 'b', 'b', 'c'])
b = collections.Counter({"a": 2, "b": 3, "c": 1})
c = collections.Counter(a=2, b=3, c=1)
print(a)
print(b)
print(c)

运行之后,效果如下:

初始化

这种是直接通过构造函数进行填充。当然,我们还可以直接构造一个空Counter,然后通过update()函数进行填充。

import collections

a = collections.Counter()
a.update(['a', 'a', 'b', 'b', 'b', 'c'])
print(a)

运行效果和上面的a一样,这里就不上图了,感兴趣的读者自己测试运行。

二、遍历Counter

通过上面初始化以及更新,我们Counter容器中存在了很多的值。因为输出的是字典的形式,所以我们可以直接通过字典的方式进行访问。

import collections

a = collections.Counter()
a.update(['a', 'a', 'b', 'b', 'b', 'c'])

for key in 'abcde':
    print(key, "=", a[key])

运行之后,效果如下:

效果

可以看到容器Counter,可以输出空值不报错。因为当我们没有找到某个值时,其默认计数为0。

三、elements()

当然,如果你想实现那种输出没有0值的遍历。可以使用elements()迭代器。具体代码如下:

import collections

a = collections.Counter()
a.update('caabbbc')
print(list(a.elements()))

运行之后,效果如下:

elements

需要注意的是,elements()虽然去除了0值,但并不能保证遍历顺序。

四、most_common

most_common()函数可以生成一个序列,统计包含n个最长遇到的输入值以及相应的计数。这里,我们来实现统计一个文档中,字母出现的个数。具体代码如下:

import collections

c = collections.Counter()
with open('英文文档.txt', 'rt') as f:
    for line in f:
        c.update(line.rstrip().lower())
for letter, count in c.most_common(5):
    print("{}:{}".format(letter, count))

运行之后,效果如下:

统计

这里统计的英文文档中,空格最多,达到了658个。其他的一次都是前几最多的个数。这样我们可以通过Counter生成一个英文文档中字母的频度分布,在自然语言的处理当中。就可以完美的结合起来进行统计使用。

五、算数操作

Counter容器不仅可以统计频度的分布。还可以进行一些算数运算。比如将两个Counter容器进行相加进行统计,亦或者相减也行。具体操作如下:

import collections

c1 = collections.Counter('abcbcabds')
c2 = collections.Counter('abcbcabds')
print("原始值:")
print(c1)
print(c2)
print("算数运算后:")
print(c1 + c2)
print(c1 - c2)
print(c1 & c2)
print(c1 | c2)

运行之后,效果如下:

算数运算

到此这篇关于Python统计可散列的对象之容器Counter详解的文章就介绍到这了,更多相关Python容器Counter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python使用Paramiko控制linux第三方库

    Python使用Paramiko控制linux第三方库

    这篇文章主要介绍了Python使用Paramiko控制linux第三方库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python 绘图库 Matplotlib 入门教程

    Python 绘图库 Matplotlib 入门教程

    Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像。本文是对Python 绘图库 Matplotlib 入门教程,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-04-04
  • 在Python中分别打印列表中的每一个元素方法

    在Python中分别打印列表中的每一个元素方法

    今天小编就为大家分享一篇在Python中分别打印列表中的每一个元素方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 使用Python实现文字转语音并生成wav文件的例子

    使用Python实现文字转语音并生成wav文件的例子

    今天小编就为大家分享一篇使用Python实现文字转语音并生成wav文件的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python爬取网页版QQ空间,生成各类图表

    python爬取网页版QQ空间,生成各类图表

    最近python课程学完了,琢磨着用python点什么东西,经过一番搜索,盯上了QQ空间,本文主要讲述了如何爬取网页版QQ空间,并生成词云图、柱状图、折线图、饼图的各种示例代码
    2021-06-06
  • Flask模板引擎之Jinja2语法介绍

    Flask模板引擎之Jinja2语法介绍

    这篇文章主要介绍了Flask模板引擎之Jinja2语法介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Python grpc超时机制代码示例

    Python grpc超时机制代码示例

    这篇文章主要介绍了Python grpc超时机制代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Python3.5装饰器原理及应用实例详解

    Python3.5装饰器原理及应用实例详解

    这篇文章主要介绍了Python3.5装饰器原理及应用,结合具体实例形式详细分析了Python3.5装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-04-04
  • python库安装与使用示例详解

    python库安装与使用示例详解

    这篇文章主要介绍了Python中的生成器函数yield、openslide库、ASAP库、concurrent.futures.ThreadPoolExecutor、xml.etree.ElementTree库、skimage库和PIL.Image库的相关知识,感兴趣的朋友一起看看吧
    2025-02-02
  • TensorFlow自定义损失函数来预测商品销售量

    TensorFlow自定义损失函数来预测商品销售量

    这篇文章主要介绍了TensorFlow自定义损失函数——预测商品销售量,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02

最新评论