Python数据结构与算法(3)---统计可散列的对象Counter_counter函数画图-程序员宅基地

技术标签: python  Counter  容器  Python数据结构与算法  字典  数据结构  Python  

前言

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)

运行之后,效果如下:
算数运算

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liyuanjinglyj/article/details/115793706

智能推荐

FPGA存储块,有没有使能Primitives output Register作用-程序员宅基地

文章浏览阅读3.1k次,点赞7次,收藏15次。在FPGA中,ROM,RAM存储块在IP核配置中都有一个配置选项:Primitives output Register,比如下图的rom IP核配置界面接下来以RAM读写为例,我这里RAM的第一个数值为1,我们观察第一个数值的位置即可看出这个reg的作用,我这里是always Enable配置:没有勾选Primitives output Register的情况,当我们给了ADDR后,1个时钟周期后,RAM存储块能够读出数值。勾选Primitives output Register的情况,当._primitives output register

日期:将格林尼治时间(GMT)转化为北京时间_gmt日期在线转成中国日期-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏6次。 格里尼治时间,就是我们常常说的0度经线的地方平时,也叫格林平时,格林平时的英文是Greenwich Mean Time,简称GMT,实际上就是UT(universal time )也叫世界时的。 从0度格林经线到120度东八区时区经线,经差为120度,换算成时间为8小时(120除以15),所以格林平时和北京时间差八小时,而且是北京时间比格林平时快8小时,因此是在格..._gmt日期在线转成中国日期

设置VIM字体(zz)-程序员宅基地

文章浏览阅读850次。[url=http://blog.csdn.net/searun/archive/2007/06/29/1671897.aspx][Hacking VIM]之定制:改变字体[/url]在控制台下的VIM是不能够改变字体的,因为字体的改变是随着终端字体的变化而变化的,但是在GVIM中,你却有权力将字体改变成自己想要的样子。在Linux下设置字体的命令是::set guifont=..._vim控制台字体配置

unity3d 屏幕适配 iPhone X 解决方案_unity ios iphone displaymanager.mm-程序员宅基地

文章浏览阅读6.3k次。添加获取手机型号方法#import + (NSString*)getDeviceVersion{ struct utsname systemInfo; uname(&systemInfo); NSString *deviceVersion = [NSString stringWithCString:systemInfo.machine enc_unity ios iphone displaymanager.mm

鸿蒙系统外销吗,郭明錤:华为可能会在10月份出货搭载鸿蒙系统的手机-程序员宅基地

文章浏览阅读99次。原标题:郭明錤:华为可能会在10月份出货搭载鸿蒙系统的手机数码新资讯?互联新事件?手机快测评?二十年专业老司机,等你上车,点击右上角关注泡泡网即可目前,大家对华为鸿蒙系统的关注度还是非常高的。此前消息,华为已经在多个国家注册了鸿蒙系统。当然,大家最关心的还是搭载鸿蒙系统的华为手机什么时候出? 现在,著名分析师郭明錤在分析报告中指出:华为可能在10月开始出货搭载鸿蒙系统的手机。郭明錤也预测:鸿蒙手机..._鸿蒙系统手机出口

ArcGIS Pro试用申请_arcgis pro怎么注册-程序员宅基地

文章浏览阅读4k次。1.打开网址,注册相关信息https://www.esri.com/zh-cn/arcgis/products/arcgis-pro/trial2.填写相关信息,之后会发送邮件到注册邮箱3.登录注册邮箱,确认链接4. 打开上面的连接,填写用户名密码5.确认之后,会跳到www.arcgis.com主页,需要填写组织简称,需要记住组织的主页..._arcgis pro怎么注册

随便推点

c语言输入字符串以井号结束,想学好C语言必须得先学会自救(命令行必须以井号“#”开头 最后不能加分号“;”结尾)...-程序员宅基地

文章浏览阅读1.6k次。想学好C语言必须得先学会自救(命令行必须以井号“#”开头 最后不能加分号“;”结尾)2018-11-24【【编程学习】想学好C语言,必须得先学会自救】https://toutiao.com/group/6573450045876601348/?iid=15906422033&app=explore_article&timestamp=1530533291&tt_from=c..._dev c++的井号有要求吗?

python 接收微信pc端_GitHub - linhuisheng/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...-程序员宅基地

文章浏览阅读1.2k次。WechatPCAPI微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。可用于二次开发在线微信机器人、微信消息监控、群控软件、开发界面作多个微信控制软件等用途。当前版本:@钊@当前版本是免费版本另有更稳定、更可靠、更强大的付费版本,点这里了解。付费版本README如果帮到你,帮我点个star。遇到问题可以提Issues,或关注公众号“燕幕自安”联系我。延..._python获取微信所有群

lua:lua作配置文件-程序员宅基地

文章浏览阅读376次。lua的一项重要用途就是作为一种配置语言(configurationlanguage)。目前,我们常用的配置文件格式有XML和ini, XML层次分明,但其缺点就是写起来太繁杂,对一些关键字如<>之类的处理比较特殊。而ini呢,配置不够灵活,只有简单的段-键-值模式,对于一些多层结构的配置,或者一些列表类型的配置,就显得力不从心了,往往需要编码人员自己分割字符串。...

BAT文件读取文件夹下所有文件名并导出_bat获取文件名称后判断是否导出文件-程序员宅基地

文章浏览阅读6.3k次,点赞4次,收藏13次。测试目录结构:E:\测试–测试1\----测试1.txt----测试2\------测试2.txt将脚本放到需要获取文件名的根目录中,直接运行脚本。执行:执行完成后会在当前目录生成allbook.txt文件,打开文件就能看到文件名。为了验证脚本是否正常完成我增加了end标志位,可以删除。脚本如下:echo off & color 0A::指定起始文件夹set ..._bat获取文件名称后判断是否导出文件

erwin 7.3 注册码 license key 亲测可用_erwin 序列号-程序员宅基地

文章浏览阅读1.8w次,点赞16次,收藏20次。erwin 7.3 注册码 license key 亲测可用module:GW3DJ-S4WG7-DDENL-FGPCD-SVUBAnavigator:6W4VQ-SKZG3-CVLPC-TGXMV-QWTYA_erwin 序列号

整型、浮点型转字符串(Format函数) - MFC_mfc浮点转字符串-程序员宅基地

文章浏览阅读2.7k次。在MFC程序中,CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。Format用于转换的格式字符%c单个字符%d十进制整数(int)%ld十进制整数(long)%f_mfc浮点转字符串

推荐文章

热门文章

相关标签