Python统计可散列的对象之容器Counter详解
作者:李元静 发布时间:2023-09-23 18:30:50
标签:Python,容器,Counter
一、初始化Counter
Counter支持3种形式的初始化,比如提供一个数组,一个字典,或单独键值对“=”式赋值。具体初始化的代码如下所示:
import collections
a = collections.Counter(['a', 'a', 'b', 'b', 'b', 'c'])
b = collections.Counter({"a": 2, "b": 3, "c": 1})
c = collections.Counter(a=2, b=3, c=1)
print(a)
print(b)
print(c)
运行之后,效果如下:
这种是直接通过构造函数进行填充。当然,我们还可以直接构造一个空Counter,然后通过update()函数进行填充。
import collections
a = collections.Counter()
a.update(['a', 'a', 'b', 'b', 'b', 'c'])
print(a)
运行效果和上面的a一样,这里就不上图了,感兴趣的读者自己测试运行。
二、遍历Counter
通过上面初始化以及更新,我们Counter容器中存在了很多的值。因为输出的是字典的形式,所以我们可以直接通过字典的方式进行访问。
import collections
a = collections.Counter()
a.update(['a', 'a', 'b', 'b', 'b', 'c'])
for key in 'abcde':
print(key, "=", a[key])
运行之后,效果如下:
可以看到容器Counter,可以输出空值不报错。因为当我们没有找到某个值时,其默认计数为0。
三、elements()
当然,如果你想实现那种输出没有0值的遍历。可以使用elements()迭代器。具体代码如下:
import collections
a = collections.Counter()
a.update('caabbbc')
print(list(a.elements()))
运行之后,效果如下:
需要注意的是,elements()虽然去除了0值,但并不能保证遍历顺序。
四、most_common
most_common()函数可以生成一个序列,统计包含n个最长遇到的输入值以及相应的计数。这里,我们来实现统计一个文档中,字母出现的个数。具体代码如下:
import collections
c = collections.Counter()
with open('英文文档.txt', 'rt') as f:
for line in f:
c.update(line.rstrip().lower())
for letter, count in c.most_common(5):
print("{}:{}".format(letter, count))
运行之后,效果如下:
这里统计的英文文档中,空格最多,达到了658个。其他的一次都是前几最多的个数。这样我们可以通过Counter生成一个英文文档中字母的频度分布,在自然语言的处理当中。就可以完美的结合起来进行统计使用。
五、算数操作
Counter容器不仅可以统计频度的分布。还可以进行一些算数运算。比如将两个Counter容器进行相加进行统计,亦或者相减也行。具体操作如下:
import collections
c1 = collections.Counter('abcbcabds')
c2 = collections.Counter('abcbcabds')
print("原始值:")
print(c1)
print(c2)
print("算数运算后:")
print(c1 + c2)
print(c1 - c2)
print(c1 & c2)
print(c1 | c2)
运行之后,效果如下:
来源:https://liyuanjinglyj.blog.csdn.net/article/details/115793706


猜你喜欢
- 目录一、使用说明二、代码分析1. 功能函数2. 回调函数3. 线程生成函数4. 效果展示写在最后在科研学习的过程中,我们难免需要查询相关的文
- MySQL 8.0.29 详细安装(windows zip版),供大家参考,具体内容如下1 官网官网地址:MySQL2 下载下载地址:MyS
- MicroPython是Python 3语言的精简高效实现,包括Python标准库的一小部分,经过优化可在微控制器和受限环境中运行。WiFi
- <?php//===============================时间日期=========================
- 前言在pytorch中, 想删除tensor中的指定行列,原本以为有个函数或者直接把某一行赋值为[]就可以,结果发现没这么简单,因此用了一个
- 这是我上一篇关于安全的文章的其中一节。这是一个众所周知的事实,对你运行中的网站的MySQL数据库备份是极为重要的只需按照下面3步做,一切都在
- arguments.callee关于callee的解释:callee 是 arguments 对象的一个属性。可以用于引用该函数的函数体内当
- 格式化字符串漏洞覆盖大数字时,如果选择一次性输出大数字个字节来进行覆盖,会很久很久,或者直接报错中断,所以来搞个攻防世界高手区的题目来总结一
- question: Django中对数据库的调用非常的隐蔽,在各种复杂的模块互相拼接继承中很难发现获取数据库内容的部分来,开始试图理解一下下
- 你是否有时想知道什么人访问你的站点,什么时间,IP地址等。下面我就这个问题向大家来阐述一下。这个例子使用文本文件来写入用户的信息创建一个lo
- 一、迭代器(Iterator)1.1 可迭代对象(Iterable)可迭代对象,可以简单理解为可遍历对象,即能够使用 for 循环遍历的对象
- json数据格式参见json数据格式说明。如果没操作过json数据,建议先看下上面的文章,有助于理解本文后面的内容。Go json包Mars
- 函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念。装饰器的基本概念装饰器是一个可调用对象,它的参数是另一个
- 一、定义面向对象设计鼓励将行为分布到各个对象中,把对象划分成更小的粒度,有助于增强对象的可复用性。但由于这些细粒度对象之间的联系激增,又可能
- USE [数据库名称]; --1.定义需要查找的关键字。在搜索中,使用模糊搜索:LIKE '%@key_find%'
- newstudent.asp<script LANGUAGE=″vbscript″ RUNAT=″Server″&
- 本文实例为大家分享了python3实现人脸识别的具体代码,供大家参考,具体内容如下第一种:import cv2import numpy as
- 如下所示:import matplotlib.pyplot as plt import tkinter import numpy as np
- 1.前言当我们创建Core项目的时候,Web根目录下会有个wwwroot文件目录,wwwroot文件目录里面默认有HTML、CSS、IMG、
- 目前pytorch中的交叉熵损失函数主要分为以下三类,我们将其使用的要点以及场景做一下总结。类型一:F.cross_entropy()与to