【转】python Counter模块
2024-08-23 07:31:38
>>> 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的值
最新文章
- 【代码笔记】iOS-浮点数处理并去掉多余的0
- 导出db2数据库的表结构和数据(转载)
- Java知多少(107)几个重要的java数据库访问类和接口
- 【图解】Eclipse下JRebel6.2.0热部署插件安装、破解及配置【转】
- jQuery Ajax 简单的实现跨域请求
- Cocos2d-x FlappyBird
- SpringDataMongoDB介绍(二)-MongoOperations介绍
- perl 正则前导字符
- 大暴力——[HAOI]2012音量调节
- FlashDevelop调试Air出错
- 从Javascript单线程谈Event Loop
- 运行web项目端口占用问题
- 打Patch实践
- 移动端click事件无反应或反应慢 touchend事件页面滑动时频繁触发
- 【 强大的Mac/iOS开发工具】AppCode for Mac 2017.3
- POJ 3579 Median 【二分答案】
- 过滤选择器first与子元素过滤选择器first-child的区别
- 超人前传第一至十季/全集Smallville迅雷下载
- TF-IDF词项权重计算
- 2015-10-07:几乎100%肯定:百度网盘在夜间的时段是不限速的:早晨7点前很轻松达到3M/S,7点后就降低到1M/S了,白天才400K/S左右
热门文章
- asp.net core2.1 部署centos7/linux系统 -- 安装部署(一)
- CentOS 挂载iso文件配置yum源
- 多域名绑定同一IP地址,Node.js来实现
- List&;lt;Map&;lt;String, String&;gt;&;gt; 开启 Map&;lt;String, List&;lt;String&;gt;&;gt;
- 高并发场景之RabbitMQ
- Java InputStream、String、File相互转化 --- good
- 【转】eth0 no such device(reload)
- 【转】mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
- DDD实战2 创建领域基础类库项目
- 新建py文件时取名千万要小心 不要和已有模块重名