目录

前言

正文

初始化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. B站资源推荐:复旦大学机器学习、深度学习公开课,附PDF课件下载
  2. 支付宝支付 订单参数异常,请重新下单后再发起付款
  3. 如何使用Axure高效完成高保真原型
  4. 对文本根据特殊字符进行分段代码_如何优雅地配置快应用的代码片段
  5. MongoDB数据库(3.mongodb数据库的高级查询)
  6. 《Reids 设计与实现》第七章 RDB 持久化
  7. ubuntu 下的文件搜索
  8. 联想进入bios修复计算机,联想笔记本安装win10后开启界面一直是自动修复,进不了BIOS重装系统...
  9. 对List中的对象的模糊查询
  10. 扁平化设计与质感设计: 他们有什么不同?
  11. 设计模式17-门面模式
  12. 伦敦备受青睐的标志性建筑——皇家阿尔伯特音乐厅
  13. 解决word在输入文字后公式自动矮的问题,同时实现公式自动居中,编号居右
  14. C++课程--设计设计思想、方法与模式(李建忠老师)
  15. 程序员团队名称和口号_这50个团建活动的口号,你曾经叫过几次呢?
  16. php 银行支付通道_PHP银联在线支付接口的开发实例
  17. 鄂汇办服务器处理用户信息失败,登录交管网显示获取用户信息失败
  18. 28 python pandas 摘选考勤生成考勤日历表
  19. 乙酰六肽-49/Delisens/Acetyl Hexapeptide-49
  20. 国在产vr视频区_九台vr技术安全体验馆VR行走平台资讯

热门文章

  1. 1001:Hello,World! 【信息学奥赛一本通(C++版)在线评测系统】
  2. 为什么安装了cmpp没法拖到工具栏_软件SU:简介、安装以及设置
  3. python 操作excel 教程_Python学习笔记(十六)—Python操作Excel
  4. 学习OpenVINO笔记之Inference Engine
  5. HashMap底层理解(上)
  6. 资源:网页翻译API(文档)
  7. mui栅格布局的两种方式(grid和list,宫格和列表)
  8. 免费开源B2C电商系统:(ShopXO无需授权,即可商用)- 入门篇
  9. jsp点选框_Jsp单选框
  10. 电脑编程python和c加加语言的区别_小猿圈之Bash 和 Python 编程语言优缺点