Python中主要数据结构的使用

文章目录

    • 数组
    • 队列 queue
    • 双端队列 deque
    • 栈 stack
    • 优先队列 priority_queue
    • 集合 set
    • 映射/字典 map

数组

使用内置类型list实现,主要有如下操作:

array = []
array.append(1)
length = len(array)
if not array:# 列表为空print("array is empty")

队列 queue

queue模块提供了一个Queue类,实现了线程安全的队列,主要有如下操作:

from queue import Queue
my_queue = Queue()
# 出队
my_queue.put(1)
# 入队
removed_element = my_queue.get()
is_empty = Queue.empty()

双端队列 deque

collections模块提供了deque类,实现了双端队列,允许从队列的两端进行插入和删除操作。

from collections import deque
my_deque = deque()
# 在队列的右侧插入元素
my_deque.append(1)
# 在队列的左侧插入元素
my_deque.appendleft(0)
# 从队列的右侧删除元素
right_element = my_deque.pop()
# 从队列的左侧删除元素
left_element = my_deque.popleft()

栈 stack

使用list实现,主要操作如下:

my_stack = []
my_stack.append(1)
# 从栈顶删除元素
removed_element = my_stack.pop()
# 获得栈顶元素
top = my_stack[-1]

优先队列 priority_queue

heapq模块实现了最小堆,可用来充当优先队列,主要操作如下:

import heapq
# 创建一个空的优先队列
my_priority_queue = []
# 添加元素到优先队列
heapq.heappush(my_priority_queue, 3)
heapq.heappush(my_priority_queue, 1)
heapq.heappush(my_priority_queue, 2)
# 从优先队列中弹出最小元素
min_element = heapq.heappop(my_priority_queue)
# 访问最小的元素,但不弹出
print(my_priority_queue[0])
# 将list x转换成堆
x = [4, 2, 1, 3]
heapq.heapify(x)

如果需要使用最大堆,在添加元素和弹出元素的时候,将元素取负即可。

集合 set

在Python中,内置的set类型是一种无序且不重复的数据集合,底层实现方式为哈希表,主要操作如下:

# 创建一个空集合
my_set = set()
# 创建一个包含元素的集合
my_set = {1, 2, 3, 4, 5}
# 添加元素到集合
my_set.add(6)
# 从集合中移除元素
my_set.remove(2)
# 检查元素是否在集合中
is_present = 3 in my_set
# 获取集合的长度(元素个数)
size = len(my_set)
# 进行集合的交集、并集
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
intersection = set1 & set2  # 交集
union = set1 | set2  # 并集

映射/字典 map

使用字典实现,底层实现方式为哈希表,主要操作如下:

# 创建一个空的map
my_map = {}
# 创建一个包含键值对的map
my_map = {'apple': 1, 'banana': 2, 'orange': 3}
# 添加键值对到map
my_map['grape'] = 4
# 获取map中的值
apple_value = my_map['apple']
# 检查键是否存在于map中
is_present = 'banana' in my_map
# 获取map的键的列表和值的列表
keys = list(my_map.keys())
values = list(my_map.values())
# 遍历map中的键值对
for key, value in my_map.items():print(key, value)
# 删除map中的键值对
del my_map['orange']
# 清空map
my_map.clear()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue使用高德地图(快速上手)

1.在高德平台注册账号 2.我的 > 管理管理中添加Key 3.安装依赖 npm i amap/amap-jsapi-loader --save 或 yarn add amap/amap-jsapi-loader --save 4.导入 AMapLoade import AMapLoader from amap/amap-jsapi-loader; 5.直接上代码,做好了注释(初…

子数组 OR/AND/GCD 模板(补题)

3097. 或值至少为 K 的最短子数组 II 给你一个 非负 整数数组 nums 和一个整数 k 。 如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k ,那么我们称这个数组是 特别的 。 请你返回 nums 中 最短特别非空 子数组 的长度,如果特别子数组不存在&a…

Lafida多目数据集实测

Lafida 数据集 paper:J. Imaging | Free Full-Text | LaFiDa—A Laserscanner Multi-Fisheye Camera Dataset 官网数据:https://www.ipf.kit.edu/english/projekt_cv_szenen.php 官网:KIT-IPF-Software and Datasets - LaFiDa 标定数据下载&…

Spring 详细总结

文章目录 第一章 IOC容器第一节 Spring简介1、一家公司2、Spring旗下的众多项目3、Spring Framework①Spring Framework优良特性②Spring Framework五大功能模块 第二节 IOC容器概念1、普通容器①生活中的普通容器②程序中的普通容器 2、复杂容器①生活中的复杂容器②程序中的复…

单细胞RNA测序(scRNA-seq)SRA数据下载及fastq-dumq数据拆分

单细胞RNA测序(scRNA-seq)入门可查看以下文章: 单细胞RNA测序(scRNA-seq)工作流程入门 单细胞RNA测序(scRNA-seq)细胞分离与扩增 1. NCBI查询scRNA-seq SRA数据 NCBI地址: https…

npm常用命令技巧

NPM (Node Package Manager) 是 JavaScript 的包管理工具,广泛用于管理项目中的依赖。无论是前端项目还是Node.js后端项目,NPM 都扮演着重要的角色。本文将介绍 NPM 中常用的几个命令,并提供相应的代码示例。 1. 初始化项目:npm …

[RV1106-LINUX-IPC] 关于 rndis 功能无法使用的解决办法

问题描述 按照开发文档文档,修改对应的BoardConfig.mk,增加 export RK_ENABLE_RNDISy 使用编译命令: ./build.sh sysdrv ./build.sh firmware 烧录固件后,开机使用命令: rndis.sh,出现 rndis 无法识别的情…

腾讯云(CVM)托管进行权限维持

前言 刚好看到一个师傅分享了一个阿里云ECS实战攻防,然后想到了同样利用腾讯云CVM的托管亦可实现在实战攻防中的权限维持。 简介 腾讯云自动化助手(TencentCloud Automation Tools,TAT)是一个原生运维部署工具,它可…

c语言:模拟字符串拷贝功能(strcpy),面试题

面试题&#xff1a;优化中的优化&#xff08;10分满分&#xff09; 字符串拷贝:是将一个字符串的内容复制到另一个字符串中的操作。 运用函数模拟字符串拷贝&#xff1a;&#xff08;5分&#xff09; 模拟字符串拷贝 #include <stdio.h> void my_strcpy(char* dest, c…

SD-WAN组网面临的安全挑战?如何提供有效的安全措施

SD-WAN&#xff08;软件定义广域网&#xff09;技术的广泛应用&#xff0c;企业面临着越来越多的网络安全挑战。尽管SD-WAN带来了灵活性和效率的提升&#xff0c;但其开放性和基于云的特性也带来了一系列安全威胁。本文将探讨SD-WAN组网面临的安全挑战&#xff0c;并提供一些有…

Mybatis--TypeHandler使用手册

TypeHandler使用手册 场景&#xff1a;想保存user时 teacher自动转String &#xff0c;不想每次保存都要手动去转String&#xff1b;从DB查询出来时&#xff0c;也要自动帮我们转换成Java对象 Teacher Data public class User {private Integer id;private String name;priva…

Docker 运行 io_uring 程序崩溃或出现错误时应如何解决?

这常常出现于在 Docker&#xff08;sandbox 沙盒容器&#xff09;之中运行 io_uring 服务器模式下&#xff0c;解决该问题需要打开容器 “特权模式”。 即&#xff1b; privileged: true 启用特权容器模式&#xff1a; 可以通过在 Docker 容器运行时加上 --privileged 标志来启…

Python 中的 *args 和 **kwargs

在阅读 Python 代码的过程中&#xff0c;不时会看到 *args 和 **kwargs &#xff0c;它们究竟表示什么&#xff1f;又该如何使用呢&#xff1f; 首先要明确&#xff0c;这里的 * 并不是乘法运算符也不是序列重复操作符&#xff0c;**也不是指数运算符也不是幂运算符。 * 出现…

JS继承与原型、原型链

在 JavaScript 中&#xff0c;继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式&#xff0c;并提供相应的示例代码&#xff0c;并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之…

基于javassmJSP的家用电器销售网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

day31 算法 贪心算法1

455 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…

软件质量保证计划书

1 概述 2 质量目标 3 项目基本情况 4 资源 4.1 人员 4.1.1 组织结构 4.1.2 职责 4.2 工具及设施 5 质量保证的主要工作 6 质量保证工作量估算 7 质量保证工作提交的产物 8 变更管理 9 评价标准 10 形成的记录 软件全资料获取进主页或者本文末个人名片直接获取。

Spring/SpringBoot/SpringCloud Mybatis 执行流程

在后续分析Mybatis 流程中代码的可能会用到IDEA debug 技巧&#xff1a; 条件断点 代码断点&#xff0c;右键 勾选弹窗 Condition &#xff1a; 写入表达式 回到上一步&#xff1a; Java动态代理实现 InvocationHandler接口&#xff1a; package com.lvyuanj.core.test;…

Unity:2D SpriteShape

1.1 简介 Sprite Shape 可以很灵活的更改sprite的轮廓。比如&#xff1a; 它由两部分组成&#xff1a;Sprite Shape Profile、Sprite Shape Controller&#xff0c;需要导入2D Sprite Shape Package. 1.1.1 Sprite导入要求 Texture Type - ‘Sprite (2D and UI)’.Sprite Mo…

备战蓝桥杯---刷二分与前缀和题

刷点题~ 1.二分多路归并算法 对于每一个技能&#xff0c;我们把它看成一个等差数列&#xff0c;我们把所有可能都放到一个集合里&#xff0c;排个序&#xff0c;取前m个大即可&#xff0c;现在考虑优化&#xff0c;假如m不是很大&#xff0c;我们直接用优先队列即可&#xff0…