百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python编程:集合工具类之计数器(Counter)详解与实践

off999 2024-12-04 14:39 15 浏览 0 评论

前言

本文继续来盘Python内置集合模块,这期主要介绍其中的工具类计数器类(Counter)类的使用。我们还是采用“短平快”的模式——文字+代码,助你多快好省的学会它,并能都收用上它。闲话少叙,开始正文——

@传新视界关于Python集合模块的其它工具类的学习,请查看这里:

Python编程:换种方式用字典之链式映射ChainMap

Python编程:详解命名元组(namedtuple)的使用要点

Python编程:详解内置字典(dict)子类及应用(一网打尽)
Python编程:如何搞定生成器(Generator)及表达式?

更多内容,请关注@传新视界

Counter

Counter是一个dict子类,用于计数可哈希对象。它是一个集合,其中元素被存储为字典键,它们的计数值被存储为字典值。计数值可为任何整数值,包括零或负计数。Counter类类似于其他语言中的包或多集。

计数的元素来自可迭代对象或另一个初始化的映射(或计数器)。下面是Python中创建Counter对象的一些方式。请看示例代码:

from collections import Counter

# 创建一个空的Counter对象
c1 = Counter()
print(c1)

# 从可迭代对象创建新的Counter对象
c2 = Counter('aabbbcddeeee')
print(c2)

# 从映射创建新的的Counter对象
c3 = Counter({'orange': 6, 'red': 3, 'green': 5})
print(c3)

# 从关键字参数创建Counter对象
c4 = Counter(cats=4, dogs=8)
print(c4)

程序运行结果如下所示:

Counter()

Counter({'e': 4, 'b': 3, 'a': 2, 'd': 2, 'c': 1})

Counter({'orange': 6, 'green': 5, 'red': 3})

Counter({'dogs': 8, 'cats': 4})

Counter对象有一个字典接口,只是它们会为丢失的项返回一个零计数,而不是引发KeyError,示例如下:

# 存在元素计算
c5 = Counter(['eggs', 'ham', 'jar ', 'ham'])
print(c5['ham'])

# 缺失元素计数为0
print(c5['bacon'])

输出结果如下:

2

0

从Counter中删除元素

要从Counter中删除元素,可以使用del关键字。请记住,将计数设置为零并不会从计数器中删除一个元素。请看示例代码:

# –从Counter对象删除元素 – #
# 0计数的counter条目项
c5['sausage'] = 0
print(c5)

# del 实际删除条目项
del c5['sausage']
print(c5)

输出结果为:

Counter({'ham': 2, 'eggs': 1, 'jar ': 1, 'sausage': 0})

Counter({'ham': 2, 'eggs': 1, 'jar ': 1})

如代码所示,我们将0设置为计数器中不存在的项。Python将该项以零值添加到Counter中。在第7行中,我们使用del关键字完全删除该项。很明显,计数为0,并不会删除Counter中的计数项,而要删除之,得用del命令才行。

Counter方法

Counter对象除了支持所有字典可用的方法之外,以下是其特有最常见方法:返回一个迭

1)elements():

返回迭代器,其为重复相应元素次数与其计数值相等的迭代器。按第一次遇到的顺序返回元素。如果一个元素的计数小于1,elements()将忽略它。示例如下:

# – Counter 对象方法 – #
# elements()
counter = Counter(a=1, b=2, c=0, d=-2, e=4)
sorted_elements = sorted(counter.elements())
print(sorted_elements)

输出结果为:

['a', 'b', 'b', 'e', 'e', 'e', 'e']

2)most_common([n]):

返回n个最常见元素的列表,元素的计数大小从最大到最小。如果省略n或None, most_common()将返回计数器中的所有元素。计数相等的元素按第一次遇到的顺序排列:

# 2)most_common()
most_common_3 = Counter('abracadabrae').most_common(3)
print(most_common_3)

输出结果为:

[('a', 5), ('b', 2), ('r', 2)]

3)subtract([iterable-or-mapping]):

从可迭代对象或另一个映射(或计数器)中减去元素。像dict.update(),但是减去计数而不是替换它们。输入和输出都可能是零或负的。示例如下:

# 3)subtract()
c_1 = Counter(a=4, b=2, c=0, d=-2)
c_2 = Counter(a=1, b=2, c=3, d=4)
c_1.subtract(c_2)
print(c_1)

输出结果如下:

Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

4)两个方法

通常的字典方法可用于Counter对象,但有两个方法针对计数器的工作方式不同:

fromkeys(iterable):

这个类方法Counter对象没实现。

update([iterable-or-mapping]):

从可迭代对象中计数元素,或从另一个映射(或计数器)中添加元素。类似dict.update(),但Counter是增加计数而不是替换它们。而且,迭代对象应该是元素序列,而不是(键,值)对的序列。示例如下:

# 4)update()
d = Counter(a=3, b=1)
d.update({'a': 5, 'c': 4})
print(d)
d.update('aBac')
print(d)
d.update(dict([('a',10),('e',9)]))
print(d)
#但不要这样:
d.update([('a',10),('e',9)])
print(d)

请注意下面的输出结果:

Counter({'a': 8, 'c': 4, 'b': 1})

Counter({'a': 10, 'c': 5, 'b': 1, 'B': 1})

Counter({'a': 20, 'e': 9, 'c': 5, 'b': 1, 'B': 1})

Counter({'a': 20, 'e': 9, 'c': 5, 'b': 1, 'B': 1, ('a', 10): 1, ('e', 9): 1})

1.1.1 数学式操作

Counter提供了几种数学操作来组合Counter对象运算,以生成多集(计数大于零的计数器)。加减法通过加减相应元素的计数来合并计数器。交集和并集返回对应计数的最小值和最大值。每个操作都可以接受带符号计数值的输入,但输出将排除计数为零或更少的结果。

c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
print(c + d)
print(c - d)
print(c & d)
print(c | d )

输出结果类似如下:

Counter({'a': 4, 'b': 3})

Counter({'a': 2})

Counter({'a': 1, 'b': 1})

Counter({'a': 3, 'b': 2})

一元加减法是与空计数器相加或与空计数器相减的快捷方式。示例如下:

#一元加减
c = Counter(a=2, b=-4)
print(+c)# 一元加
print(-c)# 一元减

输出结果如下:

Counter({'a': 2})

Counter({'b': 4})

简而言之,可利用Counter对象实现一些相关数据的统计分析

本文小结

本篇文章主要介绍了Python内置集合模块的工具类Counter的使用,并结合代码和描述,以期深入浅出的帮助你更好的理解和掌握Counter相关内容和应用。若是初学者,记得一定要动手实践一把才是最佳学习模式。动起手来,更进一步。本期就介绍这些了,下次见!

最后,记得 点赞+关注@传新视界,分享出去给更多的朋友看到,谢谢^_^

相关推荐

工程师必备!DeepSeek自动化运维全攻略

每天省出3小时,故障自修复+智能监控实战指南导语“总在深夜被报警短信吵醒?教你搭建智能运维体系,让DeepSeek自己管自己!”正文技能1:自动化故障诊断配置智能诊断规则:yaml复制alert_ru...

Spug - 轻量级自动化运维平台(自动化运维平台 devops)

对于中小型企业而言,进行主机和应用的管理是比较麻烦的,应用部署往往需要直接连接服务器,再进行手动的环境配置、代码拉取、应用构建和部署发布等工作,容易出错,且耗时费力。一个好的自动化运维平台,往往能大大...

轻量级无 Agent 的一个好用的“小麻雀”自动化运维平台工具!-Spug

对于中小型企业而言,进行主机和应用的管理是比较麻烦的,应用部署往往需要直接连接服务器,再进行手动的环境配置、代码拉取、应用构建和部署发布等工作,容易出错,且耗时费力。一个好的自动化运维平台,往往能大大...

运维自动化之实用python代码汇总(python自动化运维常用模块)

本文总结了运维工作中经常用到的一些实用代码块,方便在需要的时候直接搬过来使用即可1.执行系统命令,获取返回结果fromsubprocessimportPopen,PIPE,STDOUTcp...

从代码小白到自动化大师:Python 编程实战

昨天我聊了一下关于线性代数、概率统计、微积分核心概念的学习,也花了一些时间恢复一下大学时候学这些的记忆,确实来说数学很有趣也很考验人,兴趣是最好的老师对吧,既然对AI感兴趣,总要认真的学一学,接下来我...

锐捷:基于Python TextFSM模块的网络设备自动化运维方法

网络设备自动化运维,首先要实现网络设备与自动化运维平台对接,即通过代码实现登录网络设备并获取信息。邮政业科技创新战略联盟单位锐捷自主研发的数据中心交换机产品已全面支持NETCONF协议,可适用于和SD...

基于Python+vue的自动化运维、完全开源的云管理平台

真正的大师,永远都怀着一颗学徒的心!一、项目简介今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能基于RBAC权限系统录像回放DNS管理配置中心强大的作业调...

编程与数学:在Python里怎么用turtle库函数填色?

这里只给出一个示例,一个最简单的示例。看懂这个示例,你就能在自己的代码里需要填色的地方填色。首先,与前面发的Python绘画程序一样,先要装入turtle库。然后在代码中,下面需要填色时,先写一个填色...

Python UV 环境下的 PyKDL 运动学库安装

视频讲解:PythonUV环境下的PyKDL运动学库安装_哔哩哔哩_bilibilimujoco-learning这个仓库,改成uv管理环境依赖后,原来的一些包有些缺失,比如之前安装的PyKD...

python最新版3.11正式发布,有哪些新特色?(3/5)

异步任务的语法更完美python编程语言对异步编程的支持一直在改进,比如python2.0版开始就增加了生成器(generator),在3.4版开始增加了asyncio库,随后在3.5版中...

清华北大都在用!Python王者归来(全彩版)

纸上得来终觉浅,绝知此事要躬行。今天给大家带来一份由清华大学出版的《python王者归来》。在当下全民互联网,大数据的时代,Python已然成为了学习大数据、人工智能时代的首选编程语言,Python...

第六章:Python模块与包(python模块与包与类的关系区别)

6.1模块基础6.1.1理论知识模块是一个包含Python定义和语句的文件,其扩展名为.py。模块可以将代码组织成逻辑单元,提高代码的可维护性和复用性。通过将相关的函数、类和变量放在同一个模块中...

语言教育项目实战之一:Ubuntu下安装Python环境

如下项目,运行在#ubuntu#上,使用#pytho#,从最初环境开始,逐渐深入。此项目以语言学习为主要目的,实现听写、跟读、对话的服务,面向中小学生、大学生、涉外交流人员等。计划通过pyenv管...

openai-python v1.79.0重磅发布!全新Evals API升级,音频转录终极

2025年5月17日,OpenAI官方在GitHub上发布了openai-python库的最新版本——v1.79.0。本次版本重点围绕Evals评估API进行了多项功能完善,同时修复了音频转录接口的重...

你真的用对了吗?7个常被误用的Python内置函数及最佳实践

你是否曾经在使用多年的工具中突然发现一个新功能,然后感叹:“我怎么一直没发现这个?”没错,今天我们就来体验一把“Python函数版”的这种乐趣。这些函数很可能已经是你日常代码的一部分,但我敢打赌,你并...

取消回复欢迎 发表评论: