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 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
