当前位置: 首页 > 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; 首…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...