当前位置: 首页 > news >正文

【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 Counterc = 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 Counterc = 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 Counterc = 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 Counterc = 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 Counterc = 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 Counterc = 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})

补充:

 

相关文章:

【Python】collections.Counter

Python内置模块collections中的Counter是字典子类。Counter不是字典&#xff0c;但很像字典。 Counter具有字典的键和值&#xff0c;键是各个元素&#xff0c;值为该元素出现的次数。 Counter相当于计数器。常用于哈希映射&#xff08;哈希表&#xff09;。 from collection…...

【Elasticsearch】es脚本编程使用详解

目录 一、es脚本语言介绍 1.1 什么是es脚本 1.2 es脚本支持的语言 1.3 es脚本语言特点 1.4 es脚本使用场景 二、环境准备 2.1 docker搭建es过程 2.1.1 拉取es镜像 2.1.2 启动容器 2.1.3 配置es参数 2.1.4 重启es容器并访问 2.2 docker搭建kibana过程 2.2.1 拉取ki…...

Synchronized 关键字

在Java中&#xff0c;线程同步使用最多的方法是使用synchronized关键字。每个Java对象都隐含有一把锁&#xff0c;这里称为Java内置锁(或者对象锁、隐式锁)。使用synchronized(syncObject)调用相当于获取 syncObject 的内置锁&#xff0c;所以可以使用内置锁对临界区代码段进行…...

Maven系列第8篇:大型Maven项目,快速按需任意构建

本篇涉及到的内容属于神技能&#xff0c;多数使用maven的人都经常想要的一种功能&#xff0c;但是大多数人都不知道如何使用&#xff0c;废话不多说&#xff0c;上干货。 需求背景 我们需要做一个电商项目&#xff0c;一般都会做成微服务的形式&#xff0c;按业务进行划分&am…...

卷积神经网络(CNN)的组成结构以及其优点

卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;是一种深度学习模型&#xff0c;主要用于处理具有网格结构的数据&#xff0c;如图像和视频。它的结构包含以下几个关键组件&#xff1a; 卷积层&#xff08;Convolutional Layer&#xff…...

[③ADRV902x]: Digital Filter Configuration(接收端)

前言 本篇博客主要总结了ADRV9029 Rx接收端链路中各个滤波器的配置。配置不同的滤波器系数以及不同的参数&#xff0c;可以对输入的数字信号灵活得做decimation处理&#xff0c;decimation信号抽取&#xff0c;就是降低信号采样率的过程。 Receiver Signal Path 下图为接收端…...

企业安全—DevSecOps概述详情

0x00 前言 SDL存在的问题在于体量过于庞大&#xff0c;不利于快速进行适配和进行&#xff0c;所以就有了DevSecOps&#xff0c;实际上是因为敏捷开发也就是DevOps的推进&#xff0c;并且坐上了云服务模式的火车&#xff0c;所以这一系列的东西都开始普及。DevSecOps作为DevOps…...

数据结构与算法(十):动态规划与贪心算法

参考引用 Hello 算法 Github&#xff1a;hello-algo 1. 动态规划算法 动态规划将一个问题分解为一系列更小的子问题&#xff0c;并通过存储子问题的解来避免重复计算&#xff0c;从而大幅提升时间效率 问题&#xff1a;给定一个共有 n 阶的楼梯&#xff0c;你每步可以上 1 阶或…...

【C++代码】安排行程,N皇后,解数独--代码随想录

题目&#xff1a;重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必…...

SpringCloud Alibaba【二】nacos

nacos配置与使用 nacos初步使用nacos安装与配置创建命名空间 nacos使用与配置创建新项目作为父项目 创建nacos服务端项目pom.xmlapplication.yml启动类 创建nacos客户端项目pom.xml application.yml启动类 启动测试 nacos配置负载均衡改造生产者nacos-provider-projectcontroll…...

C++中的fsanitize指令

一个集成在 gcc、clang 编译器中的编译指令&#xff0c;可以有效测试程序中的一些诸如数组越界、未定义行为等情况。 举个例子&#xff1a; #include <bits/stdc.h> using namespace std;const int maxn2e55,mxr1e5,maxm1e75; int head[maxn],nxt[maxn],to[maxn],f[max…...

【AI视野·今日Robot 机器人论文速览 第五十八期】Thu, 19 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 19 Oct 2023 Totally 25 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers InViG: Benchmarking Interactive Visual Grounding with 500K Human-Robot Interactions Authors Hanbo Zhang, Jie Xu, Yuch…...

Java截取(提取)子字符串(substring()),Java分割字符串(split())

在 String 中提供了两个截取字符串的方法&#xff0c;一个是从指定位置截取到字符串结尾&#xff0c;另一个是截取指定范围的内容。下面对这两种方法分别进行介绍。 1. substring(int beginIndex) 形式 此方式用于提取从索引位置开始至结尾处的字符串部分。调用时&#xff0c…...

从厨房间到股市:家庭主妇的华美转身

我一直是一个安于现状的家庭主妇。生活中&#xff0c;我热爱烹饪、园艺和照顾家人&#xff0c;但我也渴望能有更多的自我实现和价值感。在机缘巧合下&#xff0c;我接触到了卓扬网&#xff0c;一个专业的股票投资平台。从那刻起&#xff0c;我的人生发生了翻天覆地的变化。 初…...

Oracle 数据库的锁排查方法

关键字 oracle lock 问题描述 Oracle 数据库上锁问题如何排查 解决问题思路 准备数据 create table lock_test(name varchar(10),age varchar(10));insert into lock_test values(ff,10); insert into lock_test values(yy,20); insert into lock_test values(ll,30);Orac…...

混合精度训练原理之float16和float32数据之间的互相转换

混合精度训练原理之float16和float32数据之间的互相转换 本篇文章参考&#xff1a;全网最全-混合精度训练原理 上述文章已经讲解的比较详细&#xff0c;本文只是从数值角度分析&#xff1a; 1. float32转入float16的精度误差 2. 在深度学习的混精度训练当中&#xff0c;当参数…...

网络协议--ICMP:Internet控制报文协议

6.1 引言 ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议&#xff08;TCP或UDP&#xff09;使用。一些ICMP报文把差错报文返回给用户进程。 ICMP报文是在IP数据报内部被传输的&#xff0c;如图6-1所示。 ICMP…...

《红蓝攻防对抗实战》三.内网探测协议出网之HTTP/HTTPS协议探测出网

目录 一. 在 Windows 操作系统中探测 HTTP/HTTPS 出网 1. Bitsadmin 命令 2.Certuil 命令 2.Linux系统探测HTTP/HTTPS出网 1.Curl命令 2.Wget命令 对目标服务器探测 HTTP/HTTPS 是否出网时&#xff0c;要根据目标系统类型执行命令&#xff0c;不同类型的操作系统使用的探…...

【Win11】系统重装教程(最新最详细)

目录 一.简介 二.用U盘制作PE系统 三、安装系统 软件&#xff1a;Windows 11版本&#xff1a;21H2语言&#xff1a;简体中文大小&#xff1a;5.14G安装环境&#xff1a;PE系统&#xff0c;至少7代处理器硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①丨…...

如何构建一个外卖微信小程序

随着外卖行业的不断发展&#xff0c;越来越多的商家开始关注外卖微信小程序的开发。微信小程序具有使用方便、快速上线、用户覆盖广等优势&#xff0c;成为了商家们的首选。 那么&#xff0c;如何快速开发一个外卖微信小程序呢&#xff1f;下面就让我们来看看吧&#xff01; 首…...

机器学习:支持向量机(SVM)原理解析及垃圾邮件过滤实战

一、什么是支持向量机&#xff08;SVM&#xff09; 1. 基本概念 1.1 二分类问题的本质 在机器学习中&#xff0c;分类问题是最常见的任务之一。最简单的情况就是二分类&#xff1a;比如一封邮件是“垃圾邮件”还是“正常邮件”&#xff1f;一个病人是“患病”还是“健康”&a…...

【论文阅读笔记】万花筒:用于异构多智能体强化学习的可学习掩码

摘要 在多智能体强化学习&#xff08;MARL&#xff09;中&#xff0c;通常采用参数共享来提高样本效率。然而&#xff0c;全参数共享的流行方法通常会导致智能体之间的策略同质&#xff0c;这可能会限制从策略多样性中获得的性能优势。为了解决这一关键限制&#xff0c;我们提出…...

CETOL 6σ v12.1 三维公差分析软件现已可供下载

一、新版本发布 德克萨斯州麦金尼 — 2025年6月5日 —Sigmetrix 宣布其最新版本的 CETOL 6σ 公差分析软件&#xff08;v12.1&#xff09;现已可供立即下载。公差分析在诸多方面为企业发展带来益处。它通过平衡质量与制造成本&#xff0c;助力企业提升盈利能力。企业还可借此缩…...

Git 提交备注应该如何规范

Git 提交备注应该如何规范 在软件开发过程中&#xff0c;Git 作为版本控制系统被广泛使用&#xff0c;而规范的提交备注对于代码的可维护性、团队协作以及项目的长期发展都有着至关重要的意义。良好的提交备注能够清晰地记录代码变更的原因、范围和影响&#xff0c;方便团队成…...

ASP.NET Core 中间件深度解析:构建灵活高效的请求处理管道

在现代Web应用开发中&#xff0c;请求处理管道的设计和实现至关重要。ASP.NET Core通过其中间件(Middleware)系统提供了一种高度灵活、可扩展的方式来构建请求处理管道。本文将全面深入地探讨ASP.NET Core中间件的概念、工作原理、实现方式以及最佳实践&#xff0c;帮助开发者掌…...

day027-Shell自动化编程-基础

文章目录 1. 修改vim配置文件自动添加注释2. 故障案例&#xff1a;Windows上写的Shell脚本上传到Linux系统上运行报错3. 脚本运行方法4. 变量4.1 普通变量4.2 环境变量4.3 特殊变量4.4 案例&#xff1a;书写ping检查脚本&#xff0c;检查脚本传入的第一个参数4.5 面试题&#x…...

梯度下降:机器学习优化的核心算法

梯度下降算法原理及其在机器学习中的实践应用 引言 在机器学习领域,优化算法扮演着核心角色。其中梯度下降法作为最基础的优化方法,为神经网络、支持向量机等模型提供了参数优化解决方案。本文将深入解析梯度下降的数学原理,探讨其多种变体实现,并通过Python代码演示具体…...

如何自定义WordPress主题(5个分步教程)

如果您已经安装了一个 WordPress 主题&#xff0c;但它不太适合您&#xff0c;您可能会感到沮丧。在定制 WordPress 主题方面&#xff0c;您有很多选择。 挑战在于找到正确的方法。 在本篇文章中&#xff0c;我将引导您了解自定义 WordPress 主题的各种选项&#xff0c;帮助您…...

NineData云原生智能数据管理平台新功能发布|2025年5月版

本月发布 6 项更新&#xff0c;其中重点发布 3 项、功能优化 3 项。 重点发布 数据库 DevOps - 多源敏感数据保护 敏感数据扫描能力大幅扩展&#xff0c;新增支持 TiDB、Doris、SelectDB、OceanBase MySQL、GreatSQL、StarRocks、ClickHouse、SingleStore、Lindorm 9 种大数据…...

NLP中的input_ids是什么?

在自然语言处理(NLP)中,input_ids 是什么 在自然语言处理(NLP)中,input_ids 是将文本转换为模型可处理的数字表示后的结果,是模型输入的核心参数之一。 一、基本概念 文本数字化 原始文本(如 “Hello world!”)无法直接被模型处理,需要通过分词器(Tokenizer) 将其…...