当前位置: 首页 > 科技观察

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

时间:2023-03-12 12:29:53 科技观察

前言本文继续讨论Python内置的采集模块。本期主要介绍计数器类(Counter)工具的使用。我们依然采用“短平快”的模式——文字+代码,助你快速省钱的学起来,用得上。事不宜迟,让我们从正文开始——CounterCounter是一个dict子类,用于对可哈希对象进行计数。它是一个集合,其中元素存储为字典键,它们的计数值存储为字典值。计数值可以是任何整数值,包括零或负计数。Counter类类似于其他语言中的pack或multiset。计数的元素来自可迭代对象或另一个初始化映射(或计数器)。以下是在Python中创建Counter对象的一些方法。请查看示例代码:fromcollectionsimportCounter#创建一个空的Counter对象c1=Counter()print(c1)#从一个可迭代对象创建一个新的Counter对象c2=Counter('aabbbcddeee')print(c2)#从map创建一个新的计数器对象c3=Counter({'orange':6,'red':3,'green':5})print(c3)#从关键字参数创建一个计数器对象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,例如:#elementexistscountc5=Counter(['eggs','ham','jar','ham'])print(c5['ham'])#缺失元素个数为0print(c5['bacon'])输出结果如下:20从Counter中删除元素要从Counter中删除元素,可以使用del关键字。请记住,将计数设置为零不会从计数器中删除元素。请看示例代码:#–deleteelementfromCounterobject–##0countedcounterentryitemc5['sausage']=0print(c5)#del实际删除条目delc5['sausage']print(c5)输出结果为:Counter({'ham':2,'eggs':1,'jar':1,'sausage':0})Counter({'ham':2,'eggs':1,'jar':1})如代码所示,我们将0设置为计数器中不存在的项目。Python将项目添加到值为零的Counter。在第7行,我们使用del关键字完全删除了该项目。显然,如果count为0,Counter中的count项是不会被删除的,但是要删除它,就得用del命令了。Counter方法Counter对象支持字典可用的所有方法,以下是它特有的最常用的方法:返回一个迭代器1)elements():返回一个迭代器,该迭代器重复相应元素的次数等于其计数值。按照第一次遇到的顺序返回元素。如果元素的计数小于1,elements()将忽略它。示例:#–计数器对象方法–##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个最常见的A列表元素,从大到小统计元素的大小。如果省略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)的输出如下:[('a',5),('b',2),('r',2)]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)#Butdon't:d.update([('a',10),('e',9)])print(d)请注意以下输出:Counter({'a':8,'c':4,'b':1})Counter({'a':10,'c':5,'b':1,'B':1})计数器({'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对象的运算以生成multisets(计数大于零的计数器)。加法和减法通过加减相应元素的计数来组合计数器。交集和并集返回对应计数的最小值和最大值。每个操作都可以接受带符号的计数值作为输入,但输出将排除计数为零或更小的结果。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相关内容和应用。如果您是初学者,请记住练习是最好的学习模式。

猜你喜欢