如何使用Python中的collections模块提供的数据结构,如deque、Counter、OrderedDict等
Python 的 collections 模块提供了一些额外的数据结构,这些数据结构在内置的数据类型(如列表、字典、集合等)的基础上,增加了额外的功能或优化了性能。下面是如何使用 collections 模块中的 deque、Counter 和 OrderedDict 这三种数据结构的简单示例。
1. deque(双端队列)
deque(发音为“deck”)是一个线程安全、快速添加/删除元素于两端的线性容器。它支持从两端快速添加和删除元素,时间复杂度为 O(1)。
python复制代码
from collections import deque | |
# 创建一个 deque | |
d = deque('ghi') | |
# 添加元素到右端 | |
d.append('j') | |
d.append('k') | |
# 添加元素到左端 | |
d.appendleft('f') | |
d.appendleft('e') | |
# 打印 deque | |
print(d) # 输出: deque(['e', 'f', 'g', 'h', 'i', 'j', 'k']) | |
# 从右端移除元素 | |
print(d.pop()) # 输出: 'k' | |
# 从左端移除元素 | |
print(d.popleft()) # 输出: 'e' |
2. Counter(计数器)
Counter 是一个字典子类,用于计数可哈希对象。它是一个字典,其中元素被当作字典键,它们的计数被存储为字典值。
python复制代码
from collections import Counter | |
# 创建一个 Counter | |
c = Counter('gallahad') | |
# 输出 Counter | |
print(c) # 输出: Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1}) | |
# 更新计数器 | |
c.update('admiral') | |
# 输出更新后的 Counter | |
print(c) # 输出: Counter({'a': 4, 'd': 2, 'l': 2, 'g': 1, 'm': 1, 'i': 1, 'r': 1, 'h': 1}) | |
# 获取某个元素的计数 | |
print(c['a']) # 输出: 4 | |
# 获取元素计数并删除该元素(如果计数为 0,则不执行删除) | |
print(c.pop('d')) # 输出: 2 | |
# 输出更新后的 Counter | |
print(c) # 输出: Counter({'a': 4, 'l': 2, 'g': 1, 'm': 1, 'i': 1, 'r': 1, 'h': 1}) |
3. OrderedDict(有序字典)
OrderedDict 是一个字典子类,它保持了元素被插入时的顺序。当迭代 OrderedDict 时,元素的顺序与它们被插入时的顺序相同。
python复制代码
from collections import OrderedDict | |
# 创建一个 OrderedDict | |
d = OrderedDict() | |
d['foo'] = 1 | |
d['bar'] = 2 | |
d['spam'] = 3 | |
d['grok'] = 4 | |
# 迭代并打印 OrderedDict | |
for key in d: | |
print(key, d[key]) | |
# 输出: | |
# foo 1 | |
# bar 2 | |
# spam 3 | |
# grok 4 | |
# 插入一个新的键值对到有序字典的开始 | |
d.move_to_end('foo', last=False) | |
# 再次迭代并打印 | |
for key in d: | |
print(key, d[key]) | |
# 输出: | |
# foo 1 | |
# bar 2 | |
# spam 3 | |
# grok 4 |
这些数据结构在需要特定功能的场景下非常有用,如需要维护插入顺序的字典、需要快速从两端添加/删除元素的列表,或者需要计数可哈希对象的场景。
相关文章:
如何使用Python中的collections模块提供的数据结构,如deque、Counter、OrderedDict等
Python 的 collections 模块提供了一些额外的数据结构,这些数据结构在内置的数据类型(如列表、字典、集合等)的基础上,增加了额外的功能或优化了性能。下面是如何使用 collections 模块中的 deque、Counter 和 OrderedDict 这三种…...
2024年道路安全员考试题库
2024年道路安全员考试题库 16.根据《中华人民共和国道路运输条例》,关于从事客运经营使用的车辆的规定,下列说法错误的是( )。 A.客运经营者应当使用符合国家规定标准的车辆从事道路运输经营 B.客运经营者应当加强对车辆的维护和检测,确保车辆符合国家规定的技术标准 C.…...
自建 Docker 镜像
本文地址:blog.lucien.ink/archives/547 本文主要参考自:自建Docker 镜像/源加速的方法 1. 简介 最近 Docker Hub 被禁一事引起了不小的波动,在这里简单讲下在这之后应该如何访问公开的 Docker Hub。 2. Cloudflare 2.1 搭建 搭建的前提是…...
php实现抖音小程序支付
开发者发起下单_小程序_抖音开放平台 第一步、抖音小程序发起支付 tt.pay_小程序_抖音开放平台 前端提交订单数据到后端接口,然后使用 tt.pay发起支付 请求参数 属性 类型 必填 说明 order_id string 是 担保交易服务端订单号 order_token string 是 …...
代码审计(1):CVE-2022-4957分析及复现
0x00漏洞描述: ѕрееdtеѕt iѕ а vеrу liɡhtԝеiɡht nеtԝоrk ѕрееd tеѕtinɡ tооl imрlеmеntеd in Jаvаѕсriрt. Thеrе iѕ а Crоѕѕ-ѕitе Sсriрtinɡ vulnеrаbilitу in librеѕроndеd ѕрееdtеѕt…...
问题:设备管理指标为完好率不低于( ),待修率不高于5%,事故率不高于1%。 #知识分享#经验分享#经验分享
问题:设备管理指标为完好率不低于( ),待修率不高于5%,事故率不高于1%。 A、100% B、95% C、90% D、80% 参考答案如图所示...
【Linux】(六)—— vim编辑器
vim文件编辑器 Vim(Vi Improved)是一个高度可配置的文本编辑器,最初基于UNIX下的Vi编辑器发展而来,广泛用于程序开发和系统管理中。vim编辑器可以只通过终端命令即可编写修改文件,不需要和gedit一样需要打开类似于记事…...
06016传感器原理与应用202207
06016传感器原理与应用202207 选择题(2*11) 1.基本的电子测量系统由四部分组成,即电源、信号调节、显示系统和B(P7) A.分档器 B.传感器 C.处理器 D.采集器 2.热电阻温度计的测量电路采用精度较高的是B&am…...
java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程
java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程 家政上门服务系统的优势 服务质量更稳定:由专业的家政人员提供服务,经过严格的培训和筛选。 价格更透明:采用套餐式收费&…...
二叉树的后序遍历-力扣
二叉树的后序遍历,指首先遍历二叉树的左节点,然后遍历二叉树的右节点,最后遍历中间节点。按照顺序进行递归遍历即可。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *rig…...
C++基础编程100题-008 OpenJudge-1.3-06 甲流疫情死亡率
更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/06/ 描述 甲流并不可怕,在中国,它的死亡率并不是很高。请根据截止2009年12月22日各省报告的甲流确诊数和死亡数,计算甲流在各省的死亡率。 输入 输入仅一行ÿ…...
计算机网络 ——网络层(IPv4地址)
计算机网络 ——网络层(IPv4地址) 什么是IPv4地址IP地址的分类特殊的IP地址 查看自己的IPv4地址 我们今天来看IPv4地址: 什么是IPv4地址 IPv4(Internet Protocol version 4)是第四版互联网协议,是第一个被…...
重写mybatisPlus自定义ID生成策略
1.项目中需要引入mybatisplus核心组件 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mp.version}</version></dependency> 2.新建一个类实现IdentifierGenera…...
华为坤灵路由器配置SSH
配置SSH服务器的管理网口IP地址。 <HUAWEI> system-view [HUAWEI] sysname SSH Server [SSH Server] interface meth 0/0/0 [SSH Server-MEth0/0/0] ip address 10.248.103.194 255.255.255.0 [SSH Server-MEth0/0/0] quit 在SSH服务器端生成本地密钥对。 [SSH Server…...
盘点一个Python网络爬虫的实战问题
点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 西宫南内多秋草,落叶满阶红不扫。 大家好,我是Python进阶者。 一、前言 前几天在Python最强王者交流群【🇿 &#x…...
100道面试必会算法-32-二叉树右视图用栈实现队列
100道面试必会算法-32-二叉树右视图&用栈实现队列 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,n…...
⽀付逻辑漏洞思路⼩集合
⼀.直接的价格修改 ⼆.修改⽀付状态 三.修改购买数量 四:⽀付附属值修改 ➀:修改优惠劵⾦额 ➁:修改优惠劵⾦额及业务逻辑问题 ➂:修改积分⾦额 ➃:满减修改 五:订单替代⽀付 六:⽀付接…...
嵌入式学习——Linux高级编程复习(线程)——day40
1. 线程 1.1 定义 线程是一个轻量级的进程 是一个任务被创建、调度、消亡的过程 1.2 线程和进程的区别与联系 1. 线程是CPU任务调度的最小单元 2. 进程是操作系统资源分配的最小单元 3. 线程(Thread)是操作系统能够进行运算调度的最小单位…...
kvm管理工具-virsh
virsh 查看全部虚拟机列表停止虚拟机列表启动虚拟机强制关闭虚拟机连接虚拟机控制台查看虚拟机的详细信息查看虚拟机接口信息查看虚拟机xml文件配置删除虚拟机 KVM(Kernel-based Virtual Machine)是一种基于 Linux 内核的虚拟化技术,允许在一…...
VisionPro的应用和入门教程
第1章 关于VisionPro 1.1 康耐视的核心技术 1. 先进的视觉系统 康耐视的视觉系统结合了高性能的图像传感器、复杂的算法和强大的计算能力,能够实时捕捉、分析和处理高分辨率图像。其视觉系统包括固定式和手持式两种,适用于各种工业环境。无论是精密电…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
