Counter类:

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

(一)创建Counter类

c = Counter() #创建一个空的Counter类

c = Counter('gallahad') #从一个可iterable对象(list、tuple、dict、字符串等)创建

c = Counter({'a': 4, 'b': 2}) #从一个字典对象创建

c = Counter(a=4, b=2)

(二)计数值的访问与缺失的键

>>> c = Counter("abcdefgab")>>> c["a"]2

>>> c["c"]1

>>> c["h"]

0

(三)计数器的更新(update和subtract)

可以使用一个iterable对象或者另一个Counter对象来更新键值。

计数器的更新包括增加和减少两种。其中,增加使用update()方法:

>>> c = Counter('which')>>> c.update('witch') #使用另一个iterable对象更新

>>> c['h']3

>>> d = Counter('watch')>>> c.update(d) #使用另一个Counter对象更新

>>> c['h']4

减少则使用subtract()方法:

>>> c = Counter('which')>>> c.subtract('witch') #使用另一个iterable对象更新

>>> c['h']1

>>> d = Counter('watch')>>> c.subtract(d) #使用另一个Counter对象更新

>>> c['a']-1

(四)键的删除

当计数值为0时,并不意味着元素被删除,删除元素应当使用del

>>> c = Counter("abcdcba")>>>c

Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})>>> c["b"] =0>>>c

Counter({'a': 2, 'c': 2, 'd': 1, 'b': 0})>>> del c["a"]>>>c

Counter({'c': 2, 'b': 2, 'd': 1})

(五)elements

返回一个迭代器。元素被重复了多少次,在该迭代器中就包含多少个该元素。元素排列无确定顺序,个数小于1的元素不被包含。

>>> c = Counter(a=4, b=2, c=0, d=-2)>>>list(c.elements())

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

(六)most_common(n)

返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,排列是无确定顺序的。

>>> c = Counter('abracadabra')>>>c.most_common()

[('a', 5), ('r', 2), ('b', 2), ('c', 1), ('d', 1)]>>> c.most_common(3)

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

(七)浅拷贝copy

>>> c = Counter("abcdcba")>>>c

Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})>>> d =c.copy()>>>d

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

(八)算术和集合操作

+、-、&、|操作也可以用于Counter。其中&和|操作分别返回两个Counter对象各元素的最小值和最大值。需要注意的是,得到的Counter对象将删除小于1的元素。

>>> c = Counter(a=3, b=1)>>> d = Counter(a=1, b=2)>>> c + d #c[x] + d[x]

Counter({'a': 4, 'b': 3})>>> c - d #subtract(只保留正数计数的元素)

Counter({'a': 2})>>> c & d #交集: min(c[x], d[x])

Counter({'a': 1, 'b': 1})>>> c | d #并集: max(c[x], d[x])

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

(九)常用操作

sum(c.values()) #所有计数的总数

c.clear() #重置Counter对象,注意不是删除

list(c) #将c中的键转为列表

set(c) #将c中的键转为set

dict(c) #将c中的键值对转为字典

c.items() #转为(elem, cnt)格式的列表

Counter(dict(list_of_pairs)) #从(elem, cnt)格式的列表转换为Counter类对象

c.most_common()[:-n:-1] #取出计数最少的n-1个元素

c += Counter() #移除0和负值

原文链接:https://www.cnblogs.com/luckiness/p/13127492.html

python counter怎么用_Counter的基本用法相关推荐

  1. Python爬虫进阶五之多线程的用法

    前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...

  2. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  3. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  4. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  5. python语言if语句-Python入门教程之if语句的用法

    这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...

  6. python中list[1啥意思_详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:para ...

  7. python中的os abort_Python os.abort()用法及代碼示例

    Python中的OS模塊提供了與操作係統進行交互的功能.操作係統屬於Python的標準實用程序模塊.該模塊提供了使用依賴於操作係統的功能的便攜式方法. os.abort()Python中的方法用於生成 ...

  8. python中os.path.join()的循环用法_Python中.join()和os.path.join()两个函数的用法详解

    Python中有.join()和os.path.join()两个函数,具体作用如下: . join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 ...

  9. Python正则替换字符串函数re.sub用法示例(1)

    本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串 然后把它 ...

  10. python items函数用法,Python中dictionary items()系列函数的用法实例

    本文实例讲述了Python中dictionary items()系列函数的用法,对Python程序设计有很好的参考借鉴价值.具体分析如下: 先来看一个示例: import html # availab ...

最新文章

  1. java.lang.IllegalMonitorStateException 异常出现原因
  2. [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询
  3. 服务器常用的端口及其用途
  4. 吴恩达对话Yann LeCun:从相识Hinton到深度学习崛起
  5. kotlin学习笔记——委托属性
  6. python中restful接口开发实例_Python RESTful接口开发02
  7. 杭州街头惊现“梦想改造家”,ATM取款区变废为宝
  8. 【bzoj4897】[Thu Summer Camp2016]成绩单 区间dp
  9. java课堂点名和提问程序_Java程序设计作业.md
  10. 在 vue中使用 html5 的 drag和 drop 拖拽功能
  11. 农夫山泉 || 到底是如何缔造年140亿销售神话的?
  12. 推特用户曝Win10版微信截图 微信或将回归Win系统
  13. 键盘上分数怎么计算机,分数符号怎样在电脑上?
  14. 收银设备对接php,快速对接payjs的个人支付接口(收银台模式)
  15. 海康萤石的本地在线码流
  16. 【Hack The Box】linux练习-- Ophiuchi
  17. 如何在javascript中发出http请求?
  18. 基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟
  19. rd授权管理器不显示服务器,2008 r2 找不到RD授权管理器
  20. 列位置CDays列位置

热门文章

  1. 北极科考:我们为什么要在北极呆上一年?
  2. vuefilters过滤器的使用,给金钱价格加上符号单位
  3. Cydia添加源http://apt.Feng.com,完成packages卡住 解决方法
  4. 主梁弹性模量计算_简支梁计算方法
  5. unity打印生成之后的条形码(二维码也行)
  6. 安卓逆向学习 之 KGB Messenger的writeup(2)
  7. 新媒传信Java_新媒小课堂——多媒体、流媒体、富媒体
  8. 番茄助手功能及快捷键
  9. 视频流媒体直播系统---------BroadVision WebTV
  10. 妈妈再也不用担心我的博客访问量了(一个可以刷博客访问量的小程序java)