目录

前言

正文

初始化Counter对象的方法

关于在Counter对象中计数为0的情况

Counter对象支持的方法

elements()

most_common([n])

subtract([iterable-or-mapping])

update([iterable-or-mapping])

Counter对象的常见操作

总结


前言

首先Counter这个工具能够用来让我们快速便捷的对某些对象做一些统计操作,包括可迭代对象iterable和映射对象mappings

正文

语法:collections.Counter([iterable-or-mapping])

注解:
A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts.

个人理解:Counter对象是字典的一个子类,它一般被用来去为可哈希的对象计数,并且,最终计数的结果是以可迭代对象和映射对象的元素为键key,以这些元素的出现次数为值value形成的无序集合。特别地,这些元素对应的值可以为0或者负数

案例:

初始化Counter对象的方法

# 1、创建一个空的Counter对象
from collections import Counter
c = Counter()
print(c)# 结果显示:
Counter()  # 2、使用可迭代对象初始化Counter对象
c = Counter('gallahad')
print(c)# 结果显示:
Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})  # 3、使用映射对象初始化Counter对象
c = Counter({'red': 4, 'blue': 2})
print(c)# 结果显示:
Counter({'red': 4, 'blue': 2})  # 4、使用关键字参数初始化Counter对象
c = Counter(cats=4, dogs=8)
print(c)# 结果显示:
Counter({'dogs': 8, 'cats': 4})

关于在Counter对象中计数为0的情况

获取Counter对象中不存在的元素的值value,不会报错KeyError,而是返回0

c = Counter(['eggs', 'ham'])
print(c['bacon'])  # 结果显示:
0

同理:如果给Counter对象中的某个元素赋值为0,并不意味着这个元素被删除了,如果想删除Counter中的某个元素,使用del

c['sausage'] = 0
print(c)  # 显示结果:
Counter({'eggs': 1, 'ham': 1, 'sausage': 0})  del c['sausage']
print(c)  # 显示结果:
Counter({'eggs': 1, 'ham': 1})

Counter对象支持的方法

elements()

这个方法返回一个迭代器,这个迭代器包含了Couter对象包含的所有元素,并以它们的计数来决定它们在这个迭代器中出现多少次,而且元素的顺序是随机的。特别地,如果元素的计数小于1,那么elements()方法会忽略这个元素:

c = Counter(a=4, b=2, c=0, d=-2)
print(sorted(c.elements()))  # 结果显示:
['a', 'a', 'a', 'a', 'b', 'b']

most_common([n])

这个方法返回一个列表,里面的元素都是以元组的形式存在,元组里的元素分别是原先Counter对象中的键值对,并且是按照元素的值的大小来决定它们的顺序(默认从大到小)。如果在使用时传入了参数n,那么返回的结果是选取列表中的前n个元素,如果没有传入参数或者传入的参数为0,那么默认是返回所有的元素。如果有多个元素的值相同,那么它们之间的顺序是随机的:

print(Counter('abracadabra').most_common(3))  # 结果显示:
[('a', 5), ('b', 2), ('r', 2)]

subtract([iterable-or-mapping])

这个方法返回的还是一个Counter对象,结果是用方法的调用者Counter对象里面元素的个数减去对应的另外一个Counter对象中元素的个数得到的差,为新的Counter对象中元素的值value

c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4, e=5)
c.subtract(d)
print(c)  # 结果显示:
Counter({'a': 3, 'b': 0, 'c': -3, 'e': -5, 'd': -6})

update([iterable-or-mapping])

这个方法类似于字典的update()方法,对于原来的Counter对象中没有的元素,则将此元素和它对应的计数添加进来,已有的元素则只是在原来的计数上加上此元素的计数:

c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4, e=5)
c.update(d)
print(c)  # 结果显示:
Counter({'a': 5, 'e': 5, 'b': 4, 'c': 3, 'd': 2})

Counter对象的常见操作

sum(c.values())                 # 统计所有元素的个数
c.clear()                       # 清空Counter对象里面的所有元素
list(c)                         # 以列表的形式展现Counter对象的所有键key
set(c)                          # 以集合的形式展现Counter对象的所有键key
dict(c)                         # 将Counter对象转换成字典
c.items()                       # 转换成包含类似(elem, cnt)元素的列表
Counter(dict(list_of_pairs))    # 将一个包含类似(elem, cnt)元素的列表转换成Counter对象
c.most_common()[:-n-1:-1]       # 找出数量最少的n个元素
+c                              # 将数量为0或负数的键值对给移除
-c                              # 将数量为0或正数的键值对给移除,并将数量为负数的元素变成整数

Counter对象的类似集合的操作

>>> c = Counter(a=3, b=1)
>>> d = Counter(a=1, b=2)
>>> c + d                       # 相同元素数量相加,没有的则作为新的元素
Counter({'a': 4, 'b': 3})
>>> c - d                       # 相减,只保留最后value值为正的元素
Counter({'a': 2})
>>> c & d                       # 相交,只保留相同的元素和最小的value值
Counter({'a': 1, 'b': 1})
>>> c | d                       # 合并,保留相同元素和最大的value值,包含不相同的元素
Counter({'a': 3, 'b': 2})

总结

总之,Counter对象的主要功能为快速计算相同元素的个数,并且能够进行高效的更新。
如果想要查看更加详细的内容,请移步官网:https://docs.python.org/3.6/library/collections.html

【转载】Python中collection.Counter的用法相关推荐

  1. [转载] python中string函数的用法_python中string模块各属性以及函数的用法

    参考链接: Python中的string.octdigits 任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作. python的字符 ...

  2. python中collection.Counter and和的区别

    1.collection.Counter输出的是字典,num+value,在数组中数字的种类以及出现的次数 2.and和&的区别 &, |表示位运算, and,or则依据是否非0来决定 ...

  3. [转载] Python中Numpy包的用法

    参考链接: Python中的Numpy.prod 一.数组方法 创建数组:arange()创建一维数组:array()创建一维或多维数组,其参数是类似于数组的对象,如列表等 反过来转换则可以使用num ...

  4. [转载] python中元组(tuple)用法总结

    参考链接: Python | tuple函数 一.tuple也是一个class,是不可变的list类型,不可以增删改. 创建: tup1 = ('physics', 'chemistry', 1997 ...

  5. [转载] python中append函数的用法

    参考链接: Python list append() append函数会在数组后加上相应的元素 例: a=[1,2,3] a.append(5) 此时,运行结果为 [1, 2, 3, 5] a=[1, ...

  6. python中的counter()、elements()、most_common()和subtract()函数的用法

    python中的counter().elements().most_common()和subtract()函数的用法 counter()方法: class collections.Counter([i ...

  7. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  8. python中index方法详解_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  9. python中global和nonlocal用法的详细说明

    1.前言 第一,两者的功能不同.global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数 ...

最新文章

  1. 正则表达式调用“或”变量
  2. CTFshow 反序列化 web268
  3. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别
  4. PAT1043 输出PATest (20 分)
  5. html锚点反向联动,小程序菜单左右联动
  6. 深入比特币原理(五)——高级交易与脚本
  7. Base64编码简介及在java中的使用
  8. 将多个文件绑在一起执行
  9. apache支持.htaccess
  10. Visual Studio 2010 新建完项目编译就出错
  11. 计算机网络自顶向下第六章,计算机网络 自顶向下方法 第六章(英文版).ppt
  12. Windows下SVN提交模板制作及应用
  13. 2023年度流行色出炉终于轮到火龙果和草莓熊制霸天下了 优漫动游
  14. Ubuntu18.04运行校园网客户端
  15. elasticsearch 过期数据自动删除Java代码
  16. STI解读A:STI测量方法
  17. 怎么计算两个日期之间的差值
  18. 龙之谷服务器更新文件,全区全服 维护结束 更新至Ver.417
  19. CSS外部字体引入方式
  20. Win11设置鼠标箭头图案的方法教程

热门文章

  1. response 流和写能一起吗_余甘果蜂蜜能一起吃吗?余甘果泡蜂蜜有什么功效?
  2. AttributeError: ‘str‘ object has no attribute ‘copy
  3. C++/OpenCV:将数据保存到xml、yaml / 从xml、yaml读取数据
  4. [有限元]利用虚位移和虚力的定义、对称性推导弹性力学公式
  5. ieee latex 双栏_用Latex写学术论文: IEEE Latex模板和文档设置(\documentclass)
  6. js 判断一个字符在字符串中出现的次数 - 代码篇
  7. java for update 无效_java.sql.BatchUpdateException:调用中的无效参数
  8. 函数返回结构体指针_9.3 结构体指针
  9. jee-weapp是一套基于jfinal,dubbo微服务开发的微信小程序商城项目,首次开放全部拼团前后台源码
  10. 宝塔面板插件 sitemap生成器(附神马/百度主动推送)