python里的数据结构
- 列表(List)
- 定义和特点:
- 列表是一种有序的可变序列,可包含不同类型的元素,如整数、字符串、列表等。可以通过索引访问和修改元素,索引从 0 开始。
- 代码示例:
- 定义和特点:
my_list = [1, 2, 'apple', [4, 5]]
print(my_list[0]) # 输出列表中的第一个元素,即1
my_list[2] = 'banana' # 修改列表中的第三个元素
print(my_list)
- 创建列表
- 直接创建:使用方括号
[]将元素括起来,元素之间用逗号分隔。例如:my_list = [1, 2, 3],可以包含不同类型的元素,如my_list_with_different_types = [1, "apple", True]。 - 使用
list()函数创建:可以将其他可迭代对象(如元组、集合、字符串)转换为列表。例如,将元组转换为列表:my_tuple = (1, 2, 3),my_list_from_tuple = list(my_tuple),此时my_list_from_tuple的值为[1, 2, 3];将字符串转换为列表:my_string = "abc",my_list_from_string = list(my_string),得到['a', 'b', 'c']。
- 直接创建:使用方括号
- 访问元素
- 通过索引访问:列表中的元素索引从 0 开始,使用方括号
[]加上索引值来访问元素。例如:my_list = [1, 2, 3],print(my_list[0])会输出1,print(my_list[2])会输出3。可以使用负数索引从列表末尾开始访问,如my_list[-1]表示最后一个元素,my_list[-2]表示倒数第二个元素。
- 通过索引访问:列表中的元素索引从 0 开始,使用方括号
- 修改元素
- 通过索引修改:使用方括号
[]和索引来修改指定位置的元素。例如:my_list = [1, 2, 3],my_list[1] = 4,此时my_list变为[1, 4, 3]。
- 通过索引修改:使用方括号
- 添加元素
append方法:用于在列表末尾添加一个元素。例如:my_list = [1, 2, 3],my_list.append(4),则my_list变为[1, 2, 3, 4]。insert方法:用于在指定位置插入一个元素。它接受两个参数,第一个参数是插入位置的索引,第二个参数是要插入的元素。例如:my_list = [1, 2, 3],my_list.insert(1, "apple"),此时my_list变为[1, "apple", 2, 3]。
- 删除元素
remove方法:用于删除列表中指定的元素。如果元素不存在,会抛出ValueError异常。例如:my_list = [1, 2, 3],my_list.remove(2),此时my_list变为[1, 3]。pop方法:用于删除并返回指定索引位置的元素。如果不指定索引,默认删除并返回最后一个元素。例如:my_list = [1, 2, 3],popped_element = my_list.pop(1),此时my_list变为[1, 3],popped_element的值为2。del关键字:可以用于删除列表中的元素或整个列表。例如:my_list = [1, 2, 3],del my_list[0],此时my_list变为[2, 3];如果使用del my_list,则会删除整个列表。
- 列表切片
- 基本语法:使用
[start:stop:step]的形式来获取列表的一个子序列。start表示起始索引(包含),stop表示结束索引(不包含),step表示步长。例如:my_list = [1, 2, 3, 4, 5],print(my_list[1:4])会输出[2, 3, 4],print(my_list[::2])会输出[1, 3, 5]。
- 基本语法:使用
- 列表排序
sort方法:用于对列表中的元素进行排序。默认是升序排序,可以通过sort(reverse = True)进行降序排序。例如:my_list = [3, 1, 2],my_list.sort(),此时my_list变为[1, 2, 3];如果使用my_list.sort(reverse = True),则my_list变为[3, 2, 1]。sorted函数:与sort方法类似,但sorted函数会返回一个新的已排序的列表,而原列表不变。例如:my_list = [3, 1, 2],new_sorted_list = sorted(my_list),此时my_list仍为[3, 1, 2],而new_sorted_list为[1, 2, 3]。
- 列表的拼接和重复
- 拼接:可以使用
+运算符将两个列表拼接在一起。例如:list1 = [1, 2],list2 = [3, 4],combined_list = list1 + list2,此时combined_list的值为[1, 2, 3, 4]。 - 重复:可以使用
*运算符将列表重复指定的次数。例如:my_list = [1, 2],repeated_list = my_list * 3,此时repeated_list的值为[1, 2, 1, 2, 1, 2]。
- 拼接:可以使用
- 查找元素位置
index方法:用于查找元素在列表中的第一个位置索引。如果元素不存在,会抛出ValueError异常。例如:my_list = [1, 2, 3, 2],print(my_list.index(2))会输出1。
- 统计元素个数
count方法:用于统计元素在列表中出现的次数。例如:my_list = [1, 2, 3, 2],print(my_list.count(2))会输出2。
- 元组(Tuple)
- 定义和特点:
- 元组是有序的不可变序列,一旦创建,元素不能修改。它也可以包含多种类型的元素,常用于存储相关联的数据。
- 代码示例:
- 定义和特点:
my_tuple = (1, 2, 'apple')
print(my_tuple[1]) # 输出元组中的第二个元素,即2
# 以下代码会出错,因为元组是不可变的
# my_tuple[2] = 'banana'
- 集合(Set)
- 定义和特点:
- 集合是无序的可变数据结构,元素具有唯一性,即不会包含重复的元素。主要用于去重、数学集合运算(如交集、并集、差集)等。
- 代码示例:
- 定义和特点:
my_set = {1, 2, 3, 3} # 自动去除重复元素,实际为{1, 2, 3}
my_set.add(4) # 添加元素4
print(my_set)
another_set = {3, 4, 5}
intersection_set = my_set & another_set # 求交集
print(intersection_set)
- 创建集合
- 直接创建:使用花括号
{}将元素括起来,元素之间用逗号分隔。例如:my_set = {1, 2, 3}。需要注意的是,如果要创建一个空集合,不能使用{},因为{}在 Python 中默认用于创建字典,空集合应该使用set()函数来创建,如empty_set = set()。 - 从可迭代对象创建:可以使用
set()函数将其他可迭代对象(如列表、元组)转换为集合,从而去除重复元素。例如:my_list = [1, 2, 2, 3],my_set_from_list = set(my_list),此时my_set_from_list的值为{1, 2, 3}。
- 直接创建:使用花括号
- 添加元素
add方法:用于向集合中添加一个元素。如果添加的元素已经存在于集合中,集合不会发生变化。例如:my_set = {1, 2, 3},my_set.add(4),此时my_set变为{1, 2, 3, 4}。
- 删除元素
remove方法:用于删除集合中指定的元素。如果元素不存在,会抛出KeyError异常。例如:my_set = {1, 2, 3},my_set.remove(2),此时my_set变为{1, 3}。discard方法:与remove类似,用于删除集合中的元素,但如果元素不存在,不会抛出异常。例如:my_set = {1, 2, 3},my_set.discard(4),my_set的值不变,仍为{1, 2, 3}。pop方法:随机删除并返回集合中的一个元素。由于集合是无序的,所以无法确定删除的是哪个元素。例如:my_set = {1, 2, 3},popped_element = my_set.pop(),popped_element的值是集合中的一个元素(可能是1、2或3),同时my_set会少一个元素。
- 集合运算
- 交集(
&或intersection方法):返回两个集合中共同的元素。例如:set1 = {1, 2, 3},set2 = {2, 3, 4},intersection_set = set1 & set2(或intersection_set = set1.intersection(set2)),intersection_set的值为{2, 3}。 - 并集(
|或union方法):返回包含两个集合中所有元素的集合。例如:set1 = {1, 2, 3},set2 = {2, 3, 4},union_set = set1 | set2(或union_set = set1.union(set2)),union_set的值为{1, 2, 3, 4}。 - 差集(
-或difference方法):返回一个集合中存在而另一个集合中不存在的元素。例如:set1 = {1, 2, 3},set2 = {2, 3, 4},difference_set = set1 - set2(或difference_set = set1.difference(set2)),difference_set的值为{1}。 - 对称差集(
^或symmetric_difference方法):返回两个集合中不重复的所有元素,即只存在于一个集合中的元素。例如:set1 = {1, 2, 3},set2 = {2, 3, 4},symmetric_difference_set = set1 ^ set2(或symmetric_difference_set = set1.symmetric_difference(set2)),symmetric_difference_set的值为{1, 4}。
- 交集(
- 判断元素是否在集合中
- 使用
in关键字。例如:my_set = {1, 2, 3},print(1 in my_set)会输出True,print(4 in my_set)会输出False。
- 使用
- 集合的比较
issubset方法(<=):用于判断一个集合是否是另一个集合的子集。例如:set1 = {1, 2},set2 = {1, 2, 3},print(set1.issubset(set2))(或print(set1 <= set2))会输出True。issuperset方法(>=):用于判断一个集合是否是另一个集合的超集。例如:set1 = {1, 2, 3},set2 = {1, 2},print(set1.issuperset(set2))(或print(set1 >= set2))会输出True。isdisjoint方法:用于判断两个集合是否没有共同元素。例如:set1 = {1, 2},set2 = {3, 4},print(set1.isdisjoint(set2))会输出True。
- 字典(Dictionary)
- 定义和特点:
- 字典是无序的可变数据结构,由键 - 值(key - value)对组成。键必须是唯一的,值可以是任何类型。通过键来访问和修改值。
- 代码示例:
- 定义和特点:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
print(my_dict['name']) # 输出键为'name'的值,即'John'
my_dict['age'] = 31 # 修改键'age'的值
print(my_dict)
- 字符串(String)
- 定义和特点:
- 字符串是有序的不可变序列,用于表示文本。可以通过索引访问字符,也可以进行切片操作。
- 代码示例:
- 定义和特点:
my_string = "Hello, World!"
print(my_string[0]) # 输出字符串中的第一个字符,即'H'
print(my_string[7:]) # 切片操作,输出从索引7开始的字符,即'World!'
# 以下代码会出错,因为字符串是不可变的
# my_string[5] = '.'相关文章:
python里的数据结构
列表(List) 定义和特点: 列表是一种有序的可变序列,可包含不同类型的元素,如整数、字符串、列表等。可以通过索引访问和修改元素,索引从 0 开始。代码示例: my_list [1, 2, apple, [4, 5]] pr…...
[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十一集:制作游戏的金钱系统吉欧Geo和初步制作HUD Canvas的额外内容
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作游戏的金钱系统吉欧Geo以及HUD Camera 1.制作金钱系统吉欧2.制作吉欧的脚本Geo Counter逻辑处理3.制作HUD Canvas的吉欧的UI4.在敌人的HealthManager.c…...
底层逻辑之:极大似然方法(Maximum Likelihood Estimation, MLE)
简介: 极大似然方法(Maximum Likelihood Estimation, MLE)是一种用于估计统计模型参数的方法。其核心思想是基于观测数据来寻找最可能产生这些数据的模型参数。 早在1821年,德国数学家高斯(C. F. Gauss)就…...
笔记:Centos Nginx Jdk Mysql OpenOffce KkFile Minio安装部署
远程工具 ToDesk Nginx 解压 tar zxvf nginx-1.20.2.tar.gz进入Nginx 文件夹 cd nginx-1.20.2报错解决 ./configure: error: C compiler cc is not found yum -y install gcc gcc-c autoconf automake make./configure: error: the HTTP rewrite module requires the PC…...
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
深入探索Go语言中的sync.Mutex与sync.RWMutex:原理、应用与实践
深入探索Go语言中的sync.Mutex与sync.RWMutex:原理、应用与实践 在并发编程的世界里,Go语言以其独特的并发模型和简洁的语法赢得了广泛的关注。在Go语言的并发控制工具箱中,sync.Mutex和sync.RWMutex是两个至关重要的工具,它们帮助开发者保护共享资源,避免竞态条件,确保…...
15.postgresql--jsonb 数组进行打平,过滤
用jsonb_array_elements函数先展开数组,再用jsonb_each函数遍历元素中的键值对 例如: SELECT * FROM data_table, LATERAL jsonb_array_elements(json_column) WITH ORDINALITY as elem(element, idx) JOIN LATERAL jsonb_each(elem.element) as kv(ke…...
linux下i2c开发与框架源码分析
目录 1 概述 2 I2c子系统框架 3 I2C的使用流程 3.1 在驱动里使用 3.2 在应用层使用 3.3 I2ctool的使用 4 为硬件i2c注册一个适配器 5 i2c子系统源码流程分析 5.1 i2c device与driver绑定过程 5.1.1 Driver的注册与处理 5.1.2 Client device的生成 5.2 I2c的发送与接…...
[ruby on rails] 安装docker
1. docker安装 ubuntu14.04后自带docker安装包,可以直接安装docker.io sudo apt-get updatesudo apt-get install -y docker.io # 安装后启动sudo service docker start最新版本docker 安装docker-ce # 官方源 curl -fsSL https://download.docker.com/linux/ubun…...
I2C学习
详情学习 12. I2C通讯 — [野火]Linux基础与应用开发实战指南——基于LubanCat-RK系列板卡 文档 (embedfire.com) 问题 i2c总线中scl和sda两条线的作用以及区别 在 I2C 总线(Inter-Integrated Circuit)中,SCL 和 SDA 是两条核心信号线&am…...
VUE:基于MVVN的前端js框架
文章目录 vue框架v-show vue框架 注意是 先写函数名,再写function。 handle:function (){}下面是错误的 function:handle(){}3 v-show 本质上等于号后面还是判断条件,所以不能写赋值语句,下面是正确的 下面是错误的 v-show " ge…...
06、Spring AOP
在我们接下来聊Spring AOP之前我们先了解一下设计模式中的代理模式。 一、代理模式 代理模式是23种设计模式中的一种,它属于结构型设计模式。 对于代理模式的理解: 程序中对象A与对象B无法直接交互,如:有人要找某个公司的老总得先打前台登记传达程序中某个功能需要在原基…...
c语言学习26字符串的应用
字符串在stm32串口中的应用 串口控制流水灯 pc通过串口发送字符串命令控制流水灯 open 流水灯打开 close 流水灯关闭 speed 1~9速度控制 if(strcmp((char *)usart1_rec_buff,"open")0) { led_flag 1; } else if(strcmp((char *)usart1_rec_buff,"close&qu…...
法语旅游常用口语-柯桥学外语到蓝天广场泓畅学校
以下是一些实用的法语旅游常用口语,帮助你在法国旅行时能够进行基本的交流: 问候与道别 Bonjour: 用于日常问候。Au revoir: 用于告别。 请求帮助 S’il vous plat: 用于请求帮助,例如在需要寻找某个地点或服务时。 询问信息 Excusez-moi: 用…...
Kafka 生产者优化与数据处理经验
Kafka:分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析:…...
MySQL 主从复制之多线程复制
一、MySQL 多线程复制的背景 MySQL 的主从复制延迟一直是受开发者最为关注的问题之一,MySQL 从 5.6 版本开始追加了并行复制功能,目的就是为了改善复制延迟问题,并行复制称为enhanced multi-threaded slave(简称MTS)。…...
Linux2.6内核进程调度队列
文章目录 前言运行队列 runqueue优先级活动队列过期队列活跃队列 VS 过期队列active指针和expired指针O(1)调度算法 前言 在前面学习并认识了进程之后,我们会发出一个疑问:Linux内核是如何调度进程的呢? 接下来我们就以Linux2.6内核为例深入探…...
Infineon(英飞凌) TLE985xQX 芯片电机工作电流、电压AD采样
其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 单片机芯片合集 文章目录 其他系列文章导航 文章目录 前言 一、选取合适的端口 1.通过 OP1、OP2 电流采集运放输入端口进行H桥驱动的电流采集。 2.通过 O_D_VBAT_AD_EN、I_A_VBAT_A…...
Sparrow系列拓展篇:对信号量应用问题的深入讨论
前言 笔者之前已经介绍过了Sparrow信号量的源码,但是对于信号量的使用,并没有讲得非常详细,仅仅讲了同步与互斥的概念。 本章让笔者介绍如何使用Sparrow的信号量,深入探讨一下信号量在同步、计数与互斥中的应用。 使用信号量解…...
图文详解Docker下配置、测试Redis
文章目录 前言实测环境:实验思路: 正文1.准备工作2. 配置、运行 Redis 容器3. 配置测试 总结 前言 配置、测试redis数据库服务器,首先确保正确安装docker,并且已启动运行,具体安装docker方法见笔者前面的博文《OpenEu…...
千问 LeetCode 2543. 判断一个点是否可以到达 Java实现
这道题的核心思路是从终点反向推导回起点,并利用最大公约数(GCD) 的性质来判定。核心思路从 (1, 1) 正向推导到 (targetX, targetY) 路径太多,不好下手。我们反过来想:从 (targetX, targetY) 能否通过逆操作回到 (1, 1…...
3分钟掌握PlantUML Editor:用代码思维绘制专业UML图表的终极指南
3分钟掌握PlantUML Editor:用代码思维绘制专业UML图表的终极指南 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为复杂的UML图表绘制而烦恼吗?传统的拖拽式绘…...
Llama3-8B微调显存优化实战:在单张RTX 4090上如何用PEFT+TRL跑通SFT?
Llama3-8B微调显存优化实战:单卡RTX 4090的极限挑战 当Meta发布Llama3系列模型时,8B版本因其在消费级硬件上的潜在可行性迅速成为开发者社区的焦点。但将这样一个拥有80亿参数的模型塞进24GB显存的显卡,就像试图把一头大象装进冰箱——理论上…...
别再怪硬件了!DELL服务器风扇噪音的元凶与精准静音指南(iDRAC+IPMI实战)
别再怪硬件了!DELL服务器风扇噪音的元凶与精准静音指南(iDRACIPMI实战) 服务器风扇突然狂转,噪音飙升?先别急着给硬件判死刑。这背后往往是一场系统散热策略与硬件兼容性的无声对话。作为管理员,我们需要透…...
告别ifconfig!用ip命令和ethtool搞定Linux网卡状态排查(附实战案例)
告别ifconfig!用ip命令和ethtool搞定Linux网卡状态排查(附实战案例) 在Linux服务器运维中,网络故障排查是最常见的任务之一。记得去年深夜处理一次线上事故时,面对一台突然失联的数据库服务器,我习惯性地敲…...
1.2 struct page 与 PFN:VMA 背后的物理存储
本篇目标:理解 Linux 如何为每个物理页帧维护元数据(struct page),以及虚拟地址最终如何落实到物理内存。HMM 的关键创新之一,是让设备内存(GPU VRAM)也拥有 struct page,从而被内核…...
大模型时代,软件开发行业的新玩法(2026 深度复盘)
摘要 2026 年,大模型已从 “辅助工具” 进化为软件开发的核心生产引擎,彻底重构需求、设计、编码、测试、运维全链路逻辑。传统 “人写代码” 的模式被颠覆,人机共生、AI 主导执行、人类决策审核成为行业新常态。本文结合最新行业实践、数据案…...
农业电商服务系统(10078)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
Unity IL2CPP逆向实战:用frida-il2cpp-bridge穿透三重运行时屏障
1. 这不是“又一个 Frida 教程”,而是 Unity 逆向现场的生存手册 你刚在某款热门 Unity 游戏里发现一个可疑的加密逻辑,想确认它是否调用了 UnityEngine.PlayerPrefs.SetString 存储敏感 token;或者你在调试一款国产工具类 App,…...
基于springboot2+vue2的纺织品企业财务管理系统
1. 获取地址 https://fifteen.xiaobias.com/source/198 2. 项目简介 本项目为一套基于 Spring Boot Vue 的纺织品企业财务管理系统。系统服务于企业内部员工、财务人员及管理员,旨在实现企业财务流程的信息化管理。主要功能涵盖: 员工报销申请与审核…...
