首页 > Python基础教程 > Python常见模块
阅读:4,623
Python Counter类用法完全攻略
collections 包下的 Counter 也是一个很有用的工具类,它可以自动统计容器中各元素出现的次数。
Counter 的本质就是一个特殊的 dict,只不过它的 key 都是其所包含的元素,而它的 value 则记录了该 key 出现的次数。因此,如果通过 Counter 并不存在的 key 访问 value,将会输出 0(代表该 key 出现了 0 次)。
程序可通过任何可法代对象参数来创建 Counter 对象,此时 Counter 将会自动统计各元素出现的次数,并以元素为 key,出现的次数为 value 来构建 Counter 对象;程序也能以 dict 为参数来构建 Counter 对象;还能通过关键字参数来构建 Counter 对象。例如如下程序:
下面程序示范了 Counter 类中这些方法的用法示例:
程序中第 14 行代码调用了 Counter 对象的 most_common(3) 方法,该方法会返回容器中出现次数最多的三个元素。
程序中第 18 行代码调用了 Counter 对象的 subtract() 方法执行减法,实质上就是对元素出现的次数执行减法。
运行上面代码,可以看到如下输出结果:
下面程序示范了对 Counter 对象进行的这些常用操作:
Counter 的本质就是一个特殊的 dict,只不过它的 key 都是其所包含的元素,而它的 value 则记录了该 key 出现的次数。因此,如果通过 Counter 并不存在的 key 访问 value,将会输出 0(代表该 key 出现了 0 次)。
程序可通过任何可法代对象参数来创建 Counter 对象,此时 Counter 将会自动统计各元素出现的次数,并以元素为 key,出现的次数为 value 来构建 Counter 对象;程序也能以 dict 为参数来构建 Counter 对象;还能通过关键字参数来构建 Counter 对象。例如如下程序:
from collections import Counter # 创建空的Counter对象 c1 = Counter() # 以可迭代对象创建Counter对象 c2 = Counter('hannah') print(c2) # 以可迭代对象创建Counter对象 c3 = Counter(['Python', 'Swift', 'Swift', 'Python', 'Kotlin', 'Python']) print(c3) # 以dict来创建Counter对象 c4 = Counter({'red': 4, 'blue': 2}) print(c4) # 使用关键字参数的语法创建Counter c5 = Counter(Python=4, Swift=8) print(c5)运行上面程序,可以看到如下输出结果:
Counter({'h': 2, 'a': 2, 'n': 2})
Counter({'Python': 3, 'Swift': 2, 'Kotlin': 1})
Counter({'red': 4, 'blue': 2})
Counter({'Swift': 8, 'Python': 4})
- elements():该方法返回该 Counter 所包含的全部元素组成的迭代器。
- most_common([n]):该方法返回 Counter 中出现最多的 n 个元素。
- subtract([iterable-or-mapping]):该方法计算 Counter 的减法,其实就是计算减去之后各元素出现的次数。
下面程序示范了 Counter 类中这些方法的用法示例:
from collections import Counter # 创建Counter对象 cnt = Counter() # 访问并不存在的key,将输出该key的次数为0. print(cnt['Python']) # 0 for word in ['Swift', 'Python', 'Kotlin', 'Kotlin', 'Swift', 'Go']: cnt[word] += 1 print(cnt) # 只访问Counter对象的元素 print(list(cnt.elements())) # 将字符串(迭代器)转换成Counter chr_cnt = Counter('abracadabra') # 获取出现最多的3个字母 print(chr_cnt.most_common(3)) # [('a', 5), ('b', 2), ('r', 2)] c = Counter(a=4, b=2, c=0, d=-2) d = Counter(a=1, b=2, c=3, d=4) # 用Counter对象执行减法,其实就是减少各元素的出现次数 c.subtract(d) print(c) # Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6}) e = Counter({'x': 2, 'y': 3, 'z': -4}) # 调用del删除key-value对,会真正删除该key-value对 del e['y'] print(e) # 访问'w'对应的value,'w'没有出现过,因此返回0 print(e['w']) # 0 # 删除e['w'],删除该key-value对 del e['w'] # 再次访问'w'对应的value,'w'还是没有,因此返回0 print(e['w']) # 0上面程序中第 10 行代码调用了 Counter 对象的 elements() 方法,该方法返回容器中所有元素组成的迭代器,Counter 记录了几个元素的出现次数,该方法就会返回几个对应的元素。
程序中第 14 行代码调用了 Counter 对象的 most_common(3) 方法,该方法会返回容器中出现次数最多的三个元素。
程序中第 18 行代码调用了 Counter 对象的 subtract() 方法执行减法,实质上就是对元素出现的次数执行减法。
运行上面代码,可以看到如下输出结果:
0
Counter({'Swift': 2, 'Kotlin': 2, 'Python': 1, 'Go': 1})
['Swift', 'Swift', 'Python', 'Kotlin', 'Kotlin', 'Go']
[('a', 5), ('b', 2), ('r', 2)]
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
Counter({'x': 2, 'z': -4})
0
0
- 加:将两个 Counter 对象中各 key 出现的次数相加,且只保留出现次数为正的元素。
- 减:将两个 Counter 对象中各 key 出现的次数相喊,且只保留出现次数为正的元素。
- 交:取两个 Counter 对象中都出现的 key 且各 key 对应的次数的最小数。
- 并:取两个 Counter 对象中各 key 对应的出现次数的最大数。
- 求正:只保留 Counter 对象中出现次数为 0 或正数的 key-value 对。
- 求负:只保留 Counter 对象中出现次数为负数的 key-value 对,并将出现次数改为正数。
下面程序示范了对 Counter 对象进行的这些常用操作:
from collections import Counter # 创建Counter对象 c = Counter(Python=4, Swift=2, Kotlin=3, Go=-2) # 统计Counter中所有出现次数的总和 print(sum(c.values())) # 7 # 将Counter转换为list,只保留各key print(list(c)) # ['Python', 'Swift', 'Kotlin', 'Go'] # 将Counter转换为set,只保留各key print(set(c)) # {'Go', 'Python', 'Swift', 'Kotlin'} # 将Counter转换为dict print(dict(c)) # {'Python': 4, 'Swift': 2, 'Kotlin': 3, 'Go': -2} # 将Counter转换为list,列表元素都是(元素, 出现次数)组 list_of_pairs = c.items() print(list_of_pairs) # dict_items([('Python', 4), ('Swift', 2), ('Kotlin', 3), ('Go', -2)]) # 将列表元素为(元素, 出现次数)组的list转换成Counter c2 = Counter(dict(list_of_pairs)) print(c2) # Counter({'Python': 4, 'Kotlin': 3, 'Swift': 2, 'Go': -2}) # 获取Counter中最少出现的3个元素 print(c.most_common()[:-4:-1]) # [('Go', -2), ('Swift', 2), ('Kotlin', 3)] # 清空所有key-value对 c.clear() print(c) # Counter() c = Counter(a=3, b=1, c=-1) d = Counter(a=1, b=-2, d=3) # 对Counter执行加法 print(c + d) # Counter({'a': 4, 'd': 3}) # 对Counter执行减法 print(c - d) # Counter({'b': 3, 'a': 2}) Counter({'a': 2}) # 对Counter执行交运算 print(c & d) # Counter({'a': 1}) print(c | d) # Counter({'a': 3, 'd': 3, 'b': 1}) print(+c) # Counter({'a': 3, 'b': 1}) print(-d) # Counter({'b': 2})上面程序演示了前面介绍的 Counter 的各种通用方法和运算符,并且还给出了每次运算的输出结果,读者可通过这些输出结果来理解 Counter 对象的方法和运算符的功能。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频