>>> c = Counter()                           # 创建一个新的空counter
>>> c = Counter('abcasdf') # 一个迭代对象生成的counter
>>> c = Counter({'red': 4, 'yello': 2}) # 一个映射生成的counter
>>> c = Counter(cats=2, dogs=5) # 关键字参数生成的counter # counter 生成counter, 虽然这里并没有什么用
>>> from collections import Counter
>>> c = Counter('abcasd')
>>> c
Counter({'a': 2, 'c': 1, 'b': 1, 's': 1, 'd': 1})
>>> c2 = Counter(c)
>>> c2
Counter({'a': 2, 'c': 1, 'b': 1, 's': 1, 'd': 1})

因为 Counter 实现了字典的 __missing__ 方法, 所以当访问不存在的key的时候,返回值为0:

>>> c = Counter(['apple', 'pear'])
>>> c['orange']
0

counter 常用的方法:

# elements() 按照counter的计数,重复返回元素
>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> list(c.elements())
['a', 'a', 'a', 'a', 'b', 'b'] # most_common(n) 按照counter的计数,按照降序,返回前n项组成的list; n忽略时返回全部
>>> Counter('abracadabra').most_common(3)
[('a', 5), ('r', 2), ('b', 2)] # subtract([iterable-or-mapping]) counter按照相应的元素,计数相减
>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> d = Counter(a=1, b=2, c=3, d=4)
>>> c.subtract(d)
>>> c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6}) # update([iterable-or-mapping]) 不同于字典的update方法,这里更新counter时,相同的key的value值相加而不是覆盖
# 实例化 Counter 时, 实际也是调用这个方法 # Counter 间的数学集合操作
>>> c = Counter(a=3, b=1, c=5)
>>> d = Counter(a=1, b=2, d=4)
>>> c + d # counter相加, 相同的key的value相加
Counter({'c': 5, 'a': 4, 'd': 4, 'b': 3})
>>> c - d # counter相减, 相同的key的value相减,只保留正值得value
Counter({'c': 5, 'a': 2})
>>> c & d # 交集: 取两者都有的key,value取小的那一个
Counter({'a': 1, 'b': 1})
>>> c | d # 并集: 汇聚所有的key, key相同的情况下,取大的value
Counter({'c': 5, 'd': 4, 'a': 3, 'b': 2})
常见做法:
sum(c.values()) # 继承自字典的.values()方法返回values的列表,再求和
c.clear() # 继承自字典的.clear()方法,清空counter
list(c) # 返回key组成的list
set(c) # 返回key组成的set
dict(c) # 转化成字典
c.items() # 转化成(元素,计数值)组成的列表
Counter(dict(list_of_pairs)) # 从(元素,计数值)组成的列表转化成Counter
c.most_common()[:-n-1:-1] # 最小n个计数的(元素,计数值)组成的列表
c += Counter() # 利用counter的相加来去除负值和0的值

最新文章

  1. 【代码笔记】iOS-浮点数处理并去掉多余的0
  2. 导出db2数据库的表结构和数据(转载)
  3. Java知多少(107)几个重要的java数据库访问类和接口
  4. 【图解】Eclipse下JRebel6.2.0热部署插件安装、破解及配置【转】
  5. jQuery Ajax 简单的实现跨域请求
  6. Cocos2d-x FlappyBird
  7. SpringDataMongoDB介绍(二)-MongoOperations介绍
  8. perl 正则前导字符
  9. 大暴力——[HAOI]2012音量调节
  10. FlashDevelop调试Air出错
  11. 从Javascript单线程谈Event Loop
  12. 运行web项目端口占用问题
  13. 打Patch实践
  14. 移动端click事件无反应或反应慢 touchend事件页面滑动时频繁触发
  15. 【 强大的Mac/iOS开发工具】AppCode for Mac 2017.3
  16. POJ 3579 Median 【二分答案】
  17. 过滤选择器first与子元素过滤选择器first-child的区别
  18. 超人前传第一至十季/全集Smallville迅雷下载
  19. TF-IDF词项权重计算
  20. 2015-10-07:几乎100%肯定:百度网盘在夜间的时段是不限速的:早晨7点前很轻松达到3M/S,7点后就降低到1M/S了,白天才400K/S左右

热门文章

  1. asp.net core2.1 部署centos7/linux系统 -- 安装部署(一)
  2. CentOS 挂载iso文件配置yum源
  3. 多域名绑定同一IP地址,Node.js来实现
  4. List<Map<String, String>> 开启 Map<String, List<String>>
  5. 高并发场景之RabbitMQ
  6. Java InputStream、String、File相互转化 --- good
  7. 【转】eth0 no such device(reload)
  8. 【转】mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
  9. DDD实战2 创建领域基础类库项目
  10. 新建py文件时取名千万要小心 不要和已有模块重名