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

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...