【Python】collections.Counter

Python内置模块collections中的Counter是字典子类。Counter不是字典,但很像字典。

Counter具有字典的键和值,键是各个元素,值为该元素出现的次数。

Counter相当于计数器。常用于哈希映射(哈希表)。

from collections import Counter

# 获取所有Counter对象的方法
[x for x in dir(Counter) if not x.startswith('_')]
# 结果:
['clear', 'copy', 'elements', 'fromkeys', 'get', 
'items', 'keys', 'most_common', 'pop', 'popitem', 
'setdefault', 'subtract', 'total', 'update', 'values']

初始化Counter:

from collections import Counter

# 初始化Counter
c = Counter()                           # 结果:Counter()
c = Counter('good')                     # 结果:Counter({'o': 2, 'g': 1, 'd': 1})
c = Counter(['g','o','o','d'])          # 结果:Counter({'o': 2, 'g': 1, 'd': 1})
c = Counter({'red': 4, 'blue': 2})      # 结果:Counter({'red': 4, 'blue': 2})
c = Counter(cats=4, dogs=8)             # 结果:Counter({'dogs': 8, 'cats': 4})

type(c)                                 # 结果:<class 'collections.Counter'>

将值设置为0、删除元素、清除所有元素:

键值对中的值允许为0以及负数。将设置为0不能将元素删除。

del Counter(...)[键]:删除元素。

Counter(...).pop():删除元素,并返回删除元素的值。

Counter(...).popitem():随机删除元素,返回元组。

Counter(...).clear():清除所有元素。

from collections import Counter

c = Counter('goods')            # 结果:Counter({'o': 2, 'g': 1, 'd': 1, 's': 1})

# 将'g'元素的值设为0
c['g']=0
c                              # 结果:Counter({'o': 2, 'd': 1, 's': 1, 'g': 0})

# 删除'g'元素
del c['g']
c                              # 结果:Counter({'o': 2, 'd': 1, 's': 1})
# 删除'd'元素,并返回删除元素的值
c.pop('d')                     # 结果:1
c                              # 结果:Counter({'o': 2, 's': 1})
# 随机删除元素
c.popitem()                    # 结果:('s', 1)
c                              # 结果:Counter({'o': 2})

# 清除所有元素
c.clear()
c                              # 结果:Counter()

共有多少元素、获取所有元素、遍历各个元素:

Counter(...).total():统计元素总和。即共有多少个元素,或者所有元素的值的总和

Counter(...).elements():显示所有元素。元素的个数等于所有元素值的和。返回迭代器。

Counter(...).keys():显示所有键(即不重复元素)。

Counter(...).values():显示所有值(即各个键对应的值)。

Counter(...).items():显示所有键值对,元组形式即(键,值)。

from collections import Counter

c = Counter('good')            # 结果:Counter({'o': 2, 'd': 1, 'g': 0})

# 所有元素计数的总和(即共有多少个元素,或者所有元素的值的总和)
c.total()                      # 结果:4

# 获取所有元素
set(c)                         # 结果:{'g', 'o', 'd'}
dict(c)                        # 结果:{'g': 1, 'o': 2, 'd': 1}
list(c)                        # 结果(元素不重复):['g', 'o', 'd']
list(c.elements())             # 结果(元素重复):['g', 'o', 'o', 'd']
list(c.keys())                 # 结果(键):['g', 'o', 'd']
list(c.values())               # 结果(值):[1, 2, 1]
list(c.items())                # 结果(键值对):[('g', 1), ('o', 2), ('d', 1)]

# 遍历元素
for x in c.elements():
    print(f"{x}:出现次数{c[x]}次")
# 结果:
g:出现次数1次
o:出现次数2次
o:出现次数2次
d:出现次数1次

# 遍历键
for x in c.keys():
    print(f"{x}:出现次数{c[x]}次")
# 结果:   
g:出现次数1次
o:出现次数2次
d:出现次数1次

# 遍历值
for x in c.values():
    print(x)
# 结果:  
1
2
1

# 遍历键值对
for key,val in c.items():
    print(f"{key}:{val}")
# 结果:  
g:1
o:2
d:1

增加元素值、减少元素值:

Counter(...).update(...):和另一个Counter或可迭代对象的所有元素对应的值相加。增加元素的值而不是替换值。

Counter(...).subtract(...):和另一个Counter或可迭代对象的所有元素对应的值相减。减少元素的值而不是替换值。没有元素,也可以减少,值为负数。

from collections import Counter

c = Counter('good')            # 结果:Counter({'o': 2, 'g': 1, 'd': 1})

# 添加元素(增加值 而不是 替换值)
c.update({'g':4})
c                              # 结果:Counter({'g': 5, 'o': 2, 'd': 1})
c.update(a=3)           
c                              # 结果:Counter({'g': 5, 'a': 3, 'o': 2, 'd': 1})

# 减少元素(减少值 而不是 替换值)
c.subtract(g=2)           
c                              # 结果:Counter({'g': 3, 'a': 3, 'o': 2, 'd': 1})
c.subtract({'a'=3})            
c                              # 结果:Counter({'g': 3, 'o': 2, 'd': 1, 'a': 0})
c.subtract(h=3)            
c                              # 结果:Counter({'g': 3, 'o': 2, 'd': 1, 'a': 0, 'h': -3})

查看最常出现的元素:

Counter(...).most_common(...):获取一组数据中最常出现的数据。返回列表,列表中内容为元组(元素,出现次数)。

from collections import Counter

c = Counter('good')            # 结果:Counter({'o': 2, 'g': 1, 'd': 1})

# 最常出现的2个数据
c.most_common(2)               # 结果:[('o', 2), ('g', 1)]

# 最常出现的1个数据
c.most_common(1)               # 结果:[('o', 2)]

获取元素的值:

Counter(...).get(键):通过键获取值,没有返回None。

Counter(...).setdefault(键,值):通过键获取值,没有可将添加键值对,没有值默认None。

from collections import Counter

c = Counter('good')            # 结果:Counter({'o': 2, 'g': 1, 'd': 1})

c.get('o')                     # 结果:2
c.get('a')                     # 结果:None
c                              # 结果:Counter({'o': 2, 'g': 1, 'd': 1})
          
c.setdefault('g')              # 结果:1
c.setdefault('a')              # 结果:None
c                              # 结果:Counter({'g': 1, 'o': 2, 'd': 1, 'a': None})
c.setdefault('k',9)            # 结果:9
c                              # 结果:Counter({'g': 1, 'o': 2, 'd': 1, 'a': None, 'k': 9})

 拷贝Coutner:

Counter(...).copy():复制Counter,修改不影响原Counter。

from collections import Counter

c = Counter(a=3,d=1)
c                     # 结果:Counter({'a': 3, 'd': 1})
f = c.copy()
f                     # 结果:Counter({'a': 3, 'd': 1}

# 修改复制后的Counter,原Counter不改变
f['a']=2
f                     # 结果:Counter({'a': 2, 'd': 1})
c                     # 结果:Counter({'a': 3, 'd': 1})

补充:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/105661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物理世界的互动之旅:Matter.js入门指南

本文简介 戴尬猴&#xff0c;我是德育处主任 欢迎来到《物理世界的互动之旅&#xff1a;Matter.js入门指南》。 本文将带您探索 Matter.js&#xff0c;一个强大而易于使用的 JavaScript 物理引擎库。 我将介绍 Matter.js 的基本概念&#xff0c;包括引擎、世界、物体和约束等…

PyTorch卷积神经网络各层实现与介绍

本文将讲解&#xff0c;PyTorch卷积神经网络各层实现与介绍&#xff0c;包括&#xff1a;基本骨架–nn.Module的使用、卷积操作、卷积层、池化层、激活函数、全连接层的介绍。 &#x1f61c; 对于相关原理&#xff0c;可以跳转&#x1f449;卷积神经网络CNN各层基本知识 &…

vscode不显示横滚动条处理

最近发现vscode打开本地文件不显示水平的滚动条&#xff0c;但是打开一个临时文件是有水平滚动条的。 解决方案 可以一个个试 vscode配置 左下角设置–设置–搜索Scrollbar: Horizontal auto 自动visible 一直展示hidden 一直隐藏 拖动底部状态栏 发现是有的&#xff0c;但是…

LRU算法

1. 算法介绍 LRU&#xff08;Least Recently Used&#xff09;算法是一种常见的缓存替换算法&#xff0c;用于管理缓存中的数据项。它的核心思想是将最近最少使用的数据项&#xff08;最久未被访问的数据项&#xff09;替换出缓存&#xff0c;以便为新的数据项腾出空间。 LRU…

windows 离线安装 vue 环境

由于公司要求在内网开发项目&#xff0c;而内网不能连接外网&#xff0c;因此只能离线安装 vue 环境&#xff0c;在网上找过很多的离线安装方法&#xff0c;但都没有成功&#xff0c;于是在不断的尝试中找到了以下方法。 1、找一台与内网电脑相同系统的有网电脑。 2、在有网的电…

提升日期处理效率:day.js 实战经验分享

本文简介 点赞 关注 收藏 学会了 本文主要介绍我在工作中使用 day.js 较多的方法。 本文并不能代替 day.js 官方文档&#xff0c;日常工作中该查文档的还是要查文档。 本文是写给刚接触 day.js 的工友&#xff0c;让这部分工友能更顺利上手 day.js。 本文不涉及 day.js 插件…

STM32中除零运算,为何程序不崩溃?

在 C 语言中&#xff0c;除零运算会导致异常吗&#xff1f; 在 C 语言中&#xff0c;当一个数除以零时&#xff0c;会导致除法运算错误&#xff0c;通常表现为“除以零”错误或被称为“浮点异常”&#xff08;floating-point exception&#xff09;。 对于整数除法&#xff0c…

Unity的galgame形式对话系统工具

这段代码用于读取表格 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using OfficeOpenXml; using System.IO; using UnityEngine.Networking; using UnityEngine.UI; using Random UnityEngine.Random;public class Plots…

Java中会出现内存泄漏吗

这是一个老生常谈的面试题&#xff0c;本文就系统讲解一下吧 虽然Java有GC垃圾⾃动回收功能&#xff0c;但并不是说Java程序就不会内存泄漏。如果一个对象没有地⽅会使⽤到&#xff0c;但是却仍然有引用指向他&#xff0c;那么垃圾回收器就无法回收他&#xff0c;这种情况就属于…

【哈士奇赠书活动 - 44期】- 〖从零基础到精通Flutter开发〗

文章目录 ⭐️ 赠书 - 《从零基础到精通Flutter开发》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《从零基础到精通Flutter开发》 ⭐️ 内容简介 本书由浅入深地带领读者进入Flutter开发的世界&#xff0c;从Flutter的起源讲起&#xff0c…

上海亚商投顾:沪指震荡反弹 华为汽车、卫星通信板块再度爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一、市场情绪 三大指数早盘低开低走&#xff0c;深成指、创业板指一度跌超1%&#xff0c;午后集体拉升翻红。 华为汽车概念…

MySQL之事务、存储引擎、索引

文章目录 前言一、事务1.概念2.操作&#xff08;1&#xff09;开启事务&#xff08;2&#xff09;提交事务&#xff08;3&#xff09;回滚事务 3.四大特性ACID&#xff08;1&#xff09;原子性&#xff08;Atomicity&#xff09;&#xff08;2&#xff09;一致性&#xff08;Co…

利用dns协议发起ddos反射攻击

利用DNS服务器发起反射型DDOS&#xff0c;攻击带宽 基本思路&#xff1a; 1、利用any类型的dns查询&#xff0c;可完成发送少量请求数据&#xff0c;获得大量返回数据。 2、将原请求地址改为受害者地址&#xff0c;则dns会向受害者返回大量数据&#xff0c;占用带宽 警告&…

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects

Jenkins部署报错&#xff1a;JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题&#xff0c;启动的jdk版本不能满足项目启动。 登录Jenkins管理页面&#xff0c;系统管理——全局工具配置——JDK安装配置满足条件的JDK版本&#xff0c;保存配置&…

TSINGSEE青犀老旧小区升级改造AI+视频监控方案

一、背景与需求 近年来&#xff0c;政府高度重视城镇老旧小区改造工作&#xff0c;强调要加快老旧小区改造&#xff0c;不断完善城市管理和服务&#xff0c;彻底改变粗放型管理方式&#xff0c;让人民群众在城市生活得更方便、更舒心、更美好。老旧小区升级改造面临以下问题&a…

ETO制造商目前面临的六大挑战,如何应对?

与离散制造、库存制造不同&#xff0c;按订单设计制造&#xff08;ETO&#xff09;行业面临着一系列独特的挑战。从复杂的产品设计到与客户的密切联系&#xff0c;按订单生产的每件产品都不尽相同。 如果采用按订单生产方式制造产品&#xff0c;管理者总是会想方设法采购最好的…

cmd 命令关闭占用端口

工作中还是偶尔会遇到端口号被占用的情况&#xff0c;之前也有写过另一种关闭方式&#xff0c;但是发现没有命令方便&#xff0c;所以记录一下。 1、 查看 8081 端口占用的 pid 。 命令&#xff1a;netstat -ano |findstr 8081 由上图可知&#xff0c;占用 8081 端口的进程 id…

【ArcGIS模型构建器】05:批量为多个矢量数据添加相同的字段

本文实现借助arcgis模型构建器,实现批量为多个土地利用矢量数据添加相同的字段,例如DLMC,DLTB等。 文章目录 问题分析模型构建问题分析 有多个土地利用数据矢量图层,每个图层中有很多个图斑,现在需要给每个图层添加一个或者多个字段,如DLCM,DLBM等。 属性表如下所示: …

创建并启动华为HarmonyOS本地与远程模拟器及远程真机

1.打开设备管理器 2.选择要添加的手机设备,然后点击安装 3.正在下载华为手机模拟器 4.下载完成 5.创建新模拟器 下载系统镜像 点击下一步,创建模拟器 创建成功 启动模拟器 华为模拟器启动成功 6.登陆华为账号并使用远程模拟器 7.使用远程真机

实时数仓-Hologres介绍与架构

本文是向大家介绍Hologres是一款实时HSAP产品&#xff0c;隶属阿里自研大数据品牌MaxCompute&#xff0c;兼容 PostgreSQL 生态、支持MaxCompute数据直接查询&#xff0c;支持实时写入实时查询&#xff0c;实时离线联邦分析&#xff0c;低成本、高时效、快速构筑企业实时数据仓…