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

Phi-3-mini-4k-instruct-gguf实战案例:用轻量模型替代Llama3-8B做高频短任务降本

Phi-3-mini-4k-instruct-gguf实战案例&#xff1a;用轻量模型替代Llama3-8B做高频短任务降本 1. 为什么选择轻量模型 在AI应用落地的过程中&#xff0c;我们常常面临一个困境&#xff1a;大模型效果虽好&#xff0c;但部署成本高、响应速度慢。特别是在处理大量高频短任务时&…...

【flash-attn安装成功却import失败?一个ABI参数引发的‘血案’】

1. 为什么flash-attn安装成功却import失败&#xff1f; 最近在部署Llama2模型时&#xff0c;遇到了一个让人抓狂的问题&#xff1a;明明用pip安装了flash-attn&#xff0c;执行import时却报错提示找不到这个包。更诡异的是&#xff0c;pip list明明显示安装成功了&#xff0c;…...

小红书自动评论的‘伪需求’与真风险:聊聊RPA工具养号背后的封号逻辑与合规玩法

小红书自动化评论的合规边界&#xff1a;效率与账号安全的博弈术 凌晨三点&#xff0c;某MCN机构运营负责人李然被连续不断的手机提示音惊醒——团队管理的12个小红书达人账号同时收到平台封禁通知&#xff0c;而这一切都源于他们三天前部署的那套"高效互动系统"。这…...

解决Legado书源调试难题:从问题诊断到环境优化的完整指南

解决Legado书源调试难题&#xff1a;从问题诊断到环境优化的完整指南 【免费下载链接】legado Legado 3.0 Book Reader with powerful controls & full functions❤️阅读3.0, 阅读是一款可以自定义来源阅读网络内容的工具&#xff0c;为广大网络文学爱好者提供一种方便、快…...

告别大模型幻觉!RAG 原理 + Spring AI 代码实现一步到位

RAG 诞生背景&#xff1a;大模型原生缺陷 LLM 存在 3 个无法自愈的问题&#xff0c;这是 RAG 技术的核心出发点&#xff1a; LLM存在幻觉现象, 生成无事实依据、虚假编造的内容LLM知识更新缓慢, 预训练数据固定&#xff0c;无法同步新数据 / 私有数据LLM对领域知识的理解有限, …...

TempleOS 技术解析:从神圣代码到单地址空间设计的独特哲学

1. TempleOS的诞生&#xff1a;当代码遇见信仰 第一次听说TempleOS时&#xff0c;我正泡在技术论坛里闲逛。这个操作系统的名字就透着股神秘感——"神殿操作系统"。点开详细介绍后更震惊了&#xff1a;这居然是一个程序员声称按照"上帝指示"开发的系统&…...

AI选包助手:让快马智能推荐并配置浏览器插件开发所需的npm依赖

AI选包助手&#xff1a;让快马智能推荐并配置浏览器插件开发所需的npm依赖 最近想开发一个浏览器插件&#xff0c;功能很简单&#xff1a;抓取当前网页的标题、主要文本内容和所有图片链接&#xff0c;然后整理成Markdown格式一键导出。作为一个前端开发者&#xff0c;我知道这…...

Java毕业设计实战:基于SpringBoot的社区健康档案管理系统开发指南

1. 为什么选择SpringBoot开发健康档案管理系统 作为一个带过上百个Java毕业设计的导师&#xff0c;我强烈推荐用SpringBoot来开发社区健康档案管理系统。去年我带的学生小张就用这个框架完成了他的毕设&#xff0c;不仅顺利通过答辩&#xff0c;还被当地社区卫生服务中心看中直…...

2026年正点原子开发板移植方案——从0开始的Rootfs之路(5)WSL + NFS 网络启动踩坑记:从挂载失败到成功启动的完整历程

2026年正点原子开发板移植方案——从0开始的Rootfs之路&#xff08;5&#xff09;WSL NFS 网络启动踩坑记&#xff1a;从挂载失败到成功启动的完整历程项目已经开源&#xff01;尝试使用IMX-Forge给你的开发板跑新的Linux 7.0内核&#xff1a;https://github.com/Awesome-Embe…...

如何快速上手tuic:从零开始的安装与配置教程

如何快速上手tuic&#xff1a;从零开始的安装与配置教程 【免费下载链接】tuic 项目地址: https://gitcode.com/gh_mirrors/tu/tuic tuic是一款高效的GitHub加速工具&#xff0c;能够帮助用户解决GitHub访问速度慢、连接不稳定等问题&#xff0c;让开发者更流畅地获取G…...