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…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...