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…...

Python编程艺术:优雅与实用的完美平衡(推导式)
在Python这门优雅的编程语言中,处处体现着"简洁即是美"的设计哲学。今天我们深入探讨Python中那些让代码更优雅、更高效的编程技巧,这些技巧不仅能提升代码的可读性,还能让编程过程充满乐趣。 列表推导式的魔力 Python的列表推导…...

Spring Boot框架Starter组件整理
在Spring Boot框架中,starter是一种预定义的依赖集合,旨在简化Maven或Gradle等构建工具中的依赖管理。每个starter都包含了实现特定功能所需的库和组件,以及相应的配置文件。开发者只需在项目中引入相应的starter依赖,即可快速搭建…...

C/C++基础知识复习(27)
1) 移动语义和拷贝语义的区别 拷贝语义和移动语义是C中对象所有权管理的两种机制,主要在对象初始化、赋值或传参时体现。 拷贝语义 (Copy Semantics) 行为:通过深拷贝或浅拷贝,创建一个新对象,并将原对象的值或资源复制到新对象…...

IEC61850实现方案和测试-2
IEC61850实现方案和测试-1作为介绍实现方案和测试的第二篇文章,后续会继续更新,欢迎关注。 第一篇是:IEC61850实现方案和测试-1-CSDN博客 UCA详细测试用例下载: 链接: https://pan.baidu.com/s/1TTMlYRfzKITgrkWwwtcrDg 提取码:…...

flume-将日志采集到hdfs
看到hdfs大家应该做什么? 是的你应该去把集群打开, cd /export/servers/hadoop/sbin 启动集群 ./start-all.sh 在虚拟机hadoop02和hadoop03上的conf目录下配置相同的日志采集方案,‘ cd /export/servers/flume/conf 切换完成之后&#…...

一文学习开源框架LeakCanary
LeakCanary 简介 LeakCanary 是一个由 Square 开发的开源工具,主要用于检测和诊断 Android 应用中的内存泄漏问题。它通过自动化的方式帮助开发者捕捉和分析可能导致内存泄漏的对象,简化了内存问题的排查过程。 LeakCanary 的功能 自动检测内存泄漏&a…...

jetson orin系列开发版安装cuda的gpu版本的opencv
opencv安装包下载地址: https://github.com/opencv/opencv/扩展库下载地址: https://github.com/opencv/opencv_contrib1. 删除jetpack包中的opencv版本 原先的opencv库安装在目录/usr/lib/aarch64-linux-gnu/下(一般其他的第三方库也都安…...

数据结构-8.Java. 七大排序算法(中篇)
本篇博客给大家带来的是排序的知识点, 由于时间有限, 分两天来写, 中篇主要实现后三种排序算法: 冒泡排序,快速排序,下一篇讲 归并排序. 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作…...

数据结构C语言描述4(图文结合)--栈的实现,中序转后序表达式的实现
前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…...

python基本数据类型 -- 元组tuple
在 Python 中,元组(Tuple)是一种轻量级的、不可变的数据结构。与列表类似,元组用于存储有序的数据集合,但它一旦创建,其内容就无法更改。这种特性让元组在某些场景下更加安全和高效。本文将从定义、操作、应…...