Python collections模块之Counter详解

  • Counter()
    • most_common()
    • elements()
    • update()
    • subtract()

collections模块 ==> Python标准库,数据结构常用的模块;collections包含了一些特殊的容器,针对Python内置的容器,例如list、dict、set和tuple,提供了另一种选择。

collections模块常用类型有:

  • 计数器(Counter)
    dict的子类,计算可hash的对象
    请点击Counter

  • 双向队列(deque)
    类似于list的容器,可以快速的在队列头部和尾部添加、删除元素
    请点击deque

  • 默认字典(defaultdict)
    dict的子类,可以调用提供默认值的函数
    请点击defaultdict

  • 有序字典(OrderedDict)
    dict的子类,可以记住元素的添加顺序

  • 可命名元组(namedtuple)
    可以创建包含名称的tuple

Counter()

主要功能:可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。

from collections import Counterlist1 = ["a", "a", "a", "b", "c", "c", "f", "g", "g", "g", "f"]
dic = Counter(list1)
print(dic)
#结果:次数是从高到低的
#Counter({'a': 3, 'g': 3, 'c': 2, 'f': 2, 'b': 1})print(dict(dic))
#结果:按字母顺序排序的
#{'a': 3, 'b': 1, 'c': 2, 'f': 2, 'g': 3}print(dic.items()) #dic.items()获取字典的key和value
#结果:按字母顺序排序的
#dict_items([('a', 3), ('b', 1), ('c', 2), ('f', 2), ('g', 3)])print(dic.keys())
#结果:
#dict_keys(['a', 'b', 'c', 'f', 'g'])print(dic.values())
#结果:
#dict_values([3, 1, 2, 2, 3])print(sorted(dic.items(), key=lambda s: (-s[1])))
#结果:按统计次数降序排序
#[('a', 3), ('g', 3), ('c', 2), ('f', 2), ('b', 1)]for i, v in dic.items():if v == 1:print(i)
#结果:
#b
from collections import Counterstr1 = "aabbfkrigbgsejaae"
print(Counter(str1))
print(dict(Counter(str1)))
#结果:
#Counter({'a': 4, 'b': 3, 'g': 2, 'e': 2, 'f': 1, 'k': 1, 'r': 1, 'i': 1, 's': 1, 'j': 1})
#{'a': 4, 'b': 3, 'f': 1, 'k': 1, 'r': 1, 'i': 1, 'g': 2, 's': 1, 'e': 2, 'j': 1}dic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2}
print(Counter(dic1))

Counter对象支持以下三个字典不支持的方法,update()字典支持

most_common()

返回一个列表,包含counter中n个最大数目的元素,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会选择出现早的元素

list1 = ["a", "a", "a", "b", "c", "f", "g", "g", "c", "11", "g", "f", "10", "2"]
print(Counter(list1).most_common(3))
#结果:[('a', 3), ('g', 3), ('c', 2)]#"c"、"f"调换位置,结果变化
list2 = ["a", "a", "a", "b", "f", "c", "g", "g", "c", "11", "g", "f", "10", "2"]
print(Counter(list2).most_common(3))
#结果:[('a', 3), ('g', 3), ('f', 2)]

elements()

返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它

list2 = ["a", "a", "abdz", "abc", "f", "c", "g", "g", "c", "c1a1", "g", "f", "111000", "b10"]
print(''.join(Counter(list2).elements()))
#结果:aaabdzabcffccgggc1a1111000b10
print(''.join(list2))
#结果:aaabdzabcfcggcc1a1gf111000b10dic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2, "e": 0}
print(Counter(dic1))
print(list(Counter(dic1).elements()))
#结果:
#Counter({'b': 4, 'a': 3, 'c': 0, 'e': 0, 'd': -2})
#['a', 'a', 'a', 'b', 'b', 'b', 'b']

update()

从一个可迭代对象(可迭代对象是一个元素序列,而非(key,value)对构成的序列)中或者另一个映射(或counter)中所有元素相加,是数目相加而非替换它们

dic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2, "e": 0}
dic2 = {'a': 3, 'b': 4, 'c': 0, 'd': 2, "e": -1, "f": 6}
a = Counter(dic1)
print(a)
#结果:Counter({'b': 4, 'a': 3, 'c': 0, 'e': 0, 'd': -2})
b = Counter(dic2)
print(b)
#结果:Counter({'f': 6, 'b': 4, 'a': 3, 'd': 2, 'c': 0, 'e': -1})a.update(b)
print(a)
#结果:Counter({'b': 8, 'a': 6, 'f': 6, 'c': 0, 'd': 0, 'e': -1})

subtract()

从一个可迭代对象中或者另一个映射(或counter)中,元素相减,是数目相减而不是替换它们

dic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2, "e": 0}
dic2 = {'a': 3, 'b': 4, 'c': 0, 'd': 2, "e": -1, "f": 6}
a = Counter(dic1)
print(a)
#结果:Counter({'b': 4, 'a': 3, 'c': 0, 'e': 0, 'd': -2})
b = Counter(dic2)
print(b)
#结果:Counter({'f': 6, 'b': 4, 'a': 3, 'd': 2, 'c': 0, 'e': -1})
a.subtract(b)
print(a)
#结果:Counter({'e': 1, 'a': 0, 'b': 0, 'c': 0, 'd': -4, 'f': -6})

Python collections模块之Counter()详解相关推荐

  1. python导入模块介绍_详解Python模块导入方法

    python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...

  2. Python Importlib模块与__import__详解

    阅读目录 Importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 以一个例子为证: 以下为我的工程目录结构: lib/test.py: - ...

  3. python argparse模块用法实例详解

    转载自https://zhuanlan.zhihu.com/p/56922793 argsparse是python的命令行解析的标准模块,内置于python,不需要安装.这个库可以让我们直接在命令行中 ...

  4. python xlsxwriter_python模块之XlsxWriter 详解

    Xlsx是python用来构造xlsx文件的模块,可以向excel2007+中写text,numbers,formulas 公式以及hyperlinks超链接. 可以完成xlsx文件的自动化构造,包括 ...

  5. Python基础——模块和包详解以及pip操作模块和包的指令

    随着项目越来越大,所有代码都放在一个文件中,已经不能满足我们的需求了.这时候就要将代码进行整理了,模块和包的出现就是为了解决这个问题的.模块可以将一些相关联的代码组合在一个py文件中,包可以将一些相关 ...

  6. python etree模块所有函数详解_Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数...

    from xml.dom.minidom importparse, parseStringfrom xml.etree importElementTreeimportxml.dom.minidom&q ...

  7. python的socket模块_Python socket模块方法实现详解

    这篇文章主要介绍了python socket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 socket ssh (不带防止粘包的方 ...

  8. python包mdure_Python hashlib模块实例使用详解

    这篇文章主要介绍了Python hashlib模块实例使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 hashlib模块主要的作用: 加密保 ...

  9. python hashlib_Python hashlib模块实例使用详解

    这篇文章主要介绍了Python hashlib模块实例使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 hashlib模块主要的作用: 加密保 ...

  10. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

最新文章

  1. apt get 安装mysql5.7_ubuntu18.04中安装mysql(5.7)步骤详细介绍
  2. C#+uploadify3.1上传示例,可使用中文按钮
  3. JavaScript基础:(加号,数值转换,布尔转换)
  4. cordova splashscreen插件在android平台的使用
  5. [转]Myeclipse9引入easy_ui时,其中的部分js文件报错
  6. c语言计算机培训,C语言计算机基础学习||新手入门必看
  7. 将三个数按从大到小输出
  8. HHF_MySQL数据类型_简述
  9. 设计模式 创建型 工厂方法模式
  10. 数据分析从零到精通第五课 数据流量、策略、入口资源和AB实验设计
  11. 通达oa系统怎么转移到服务器,通达OA升级心通达OA操作步骤规范
  12. 决策树分类——附数据下载
  13. altium 交叉线_关于各个设备,用直通线还是交叉线连接的详解
  14. ALPS新秀登场TRON DeFi——让每个人都可参与的社会金融
  15. torch.onnx.export详细介绍
  16. redis rua解决库存问题_Redis锁完美解决高并发秒杀问题
  17. National Information Exchange Model(NIEM)操作手册
  18. 如何为表单制作平滑的jQuery验证器
  19. 现代希腊语字母表(待续)
  20. 2023全国特种作业操作证压力焊模拟考试试卷一[安考星]

热门文章

  1. ADBPGGreenplum 成本优化之磁盘水位管理
  2. 软考 - 高级信息系统项目管理师,考证好处、报考流程及知识体系
  3. 2021腾讯前端笔试实习生
  4. 单片机系统的电磁干扰要如何消除?
  5. ld cannot find -lbz2
  6. 每日AC-小米笔试 风口的猪-中国牛市
  7. mpeg4 码流格式及判断关键帧
  8. 信息系统项目管理师考试重点和难点分析
  9. 【unity3D弹跳的小球游戏制作】
  10. 什么是股市泡沫或楼市泡沫?泡沫何解?