如何使用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. 先进的视觉系统 康耐视的视觉系统结合了高性能的图像传感器、复杂的算法和强大的计算能力,能够实时捕捉、分析和处理高分辨率图像。其视觉系统包括固定式和手持式两种,适用于各种工业环境。无论是精密电…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
