当前位置: 首页 > news >正文

python里的数据结构

  1. 列表(List)
    • 定义和特点
      • 列表是一种有序的可变序列,可包含不同类型的元素,如整数、字符串、列表等。可以通过索引访问和修改元素,索引从 0 开始。
    • 代码示例
my_list = [1, 2, 'apple', [4, 5]]
print(my_list[0])  # 输出列表中的第一个元素,即1
my_list[2] = 'banana'  # 修改列表中的第三个元素
print(my_list)
  1. 创建列表
    • 直接创建:使用方括号[]将元素括起来,元素之间用逗号分隔。例如: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']
  2. 访问元素
    • 通过索引访问:列表中的元素索引从 0 开始,使用方括号[]加上索引值来访问元素。例如:my_list = [1, 2, 3]print(my_list[0])会输出1print(my_list[2])会输出3。可以使用负数索引从列表末尾开始访问,如my_list[-1]表示最后一个元素,my_list[-2]表示倒数第二个元素。
  3. 修改元素
    • 通过索引修改:使用方括号[]和索引来修改指定位置的元素。例如:my_list = [1, 2, 3]my_list[1] = 4,此时my_list变为[1, 4, 3]
  4. 添加元素
    • 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]
  5. 删除元素
    • 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,则会删除整个列表。
  6. 列表切片
    • 基本语法:使用[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]
  7. 列表排序
    • 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]
  8. 列表的拼接和重复
    • 拼接:可以使用+运算符将两个列表拼接在一起。例如: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]
  9. 查找元素位置
    • index方法:用于查找元素在列表中的第一个位置索引。如果元素不存在,会抛出ValueError异常。例如:my_list = [1, 2, 3, 2]print(my_list.index(2))会输出1
  10. 统计元素个数
  • count方法:用于统计元素在列表中出现的次数。例如:my_list = [1, 2, 3, 2]print(my_list.count(2))会输出2
  1. 元组(Tuple)
    • 定义和特点
      • 元组是有序的不可变序列,一旦创建,元素不能修改。它也可以包含多种类型的元素,常用于存储相关联的数据。
    • 代码示例
my_tuple = (1, 2, 'apple')
print(my_tuple[1])  # 输出元组中的第二个元素,即2
# 以下代码会出错,因为元组是不可变的
# my_tuple[2] = 'banana'

  1. 集合(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)
  1. 创建集合
    • 直接创建:使用花括号{}将元素括起来,元素之间用逗号分隔。例如: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}
  2. 添加元素
    • add方法:用于向集合中添加一个元素。如果添加的元素已经存在于集合中,集合不会发生变化。例如:my_set = {1, 2, 3}my_set.add(4),此时my_set变为{1, 2, 3, 4}
  3. 删除元素
    • 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的值是集合中的一个元素(可能是123),同时my_set会少一个元素。
  4. 集合运算
    • 交集(&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}
  5. 判断元素是否在集合中
    • 使用in关键字。例如:my_set = {1, 2, 3}print(1 in my_set)会输出Trueprint(4 in my_set)会输出False
  6. 集合的比较
    • 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
  1. 字典(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)

  1. 字符串(String)
    • 定义和特点
      • 字符串是有序的不可变序列,用于表示文本。可以通过索引访问字符,也可以进行切片操作。
    • 代码示例
my_string = "Hello, World!"
print(my_string[0])  # 输出字符串中的第一个字符,即'H'
print(my_string[7:])  # 切片操作,输出从索引7开始的字符,即'World!'
# 以下代码会出错,因为字符串是不可变的
# my_string[5] = '.'

相关文章:

python里的数据结构

列表&#xff08;List&#xff09; 定义和特点&#xff1a; 列表是一种有序的可变序列&#xff0c;可包含不同类型的元素&#xff0c;如整数、字符串、列表等。可以通过索引访问和修改元素&#xff0c;索引从 0 开始。代码示例&#xff1a; my_list [1, 2, apple, [4, 5]] pr…...

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十一集:制作游戏的金钱系统吉欧Geo和初步制作HUD Canvas的额外内容

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作游戏的金钱系统吉欧Geo以及HUD Camera 1.制作金钱系统吉欧2.制作吉欧的脚本Geo Counter逻辑处理3.制作HUD Canvas的吉欧的UI4.在敌人的HealthManager.c…...

底层逻辑之:极大似然方法(Maximum Likelihood Estimation, MLE)

简介&#xff1a; 极大似然方法&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是一种用于估计统计模型参数的方法。其核心思想是基于观测数据来寻找最可能产生这些数据的模型参数。 早在1821年&#xff0c;德国数学家高斯&#xff08;C. F. Gauss&#xff09;就…...

笔记: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)算法与调参

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

深入探索Go语言中的sync.Mutex与sync.RWMutex:原理、应用与实践

深入探索Go语言中的sync.Mutex与sync.RWMutex:原理、应用与实践 在并发编程的世界里,Go语言以其独特的并发模型和简洁的语法赢得了广泛的关注。在Go语言的并发控制工具箱中,sync.Mutex和sync.RWMutex是两个至关重要的工具,它们帮助开发者保护共享资源,避免竞态条件,确保…...

15.postgresql--jsonb 数组进行打平,过滤

用jsonb_array_elements函数先展开数组&#xff0c;再用jsonb_each函数遍历元素中的键值对 例如&#xff1a; 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安装包&#xff0c;可以直接安装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 总线&#xff08;Inter-Integrated Circuit&#xff09;中&#xff0c;SCL 和 SDA 是两条核心信号线&am…...

VUE:基于MVVN的前端js框架

文章目录 vue框架v-show vue框架 注意是 先写函数名&#xff0c;再写function。 handle:function (){}下面是错误的 function:handle(){}3 v-show 本质上等于号后面还是判断条件&#xff0c;所以不能写赋值语句&#xff0c;下面是正确的 下面是错误的 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…...

法语旅游常用口语-柯桥学外语到蓝天广场泓畅学校

以下是一些实用的法语旅游常用口语&#xff0c;帮助你在法国旅行时能够进行基本的交流&#xff1a; 问候与道别 Bonjour: 用于日常问候。Au revoir: 用于告别。 请求帮助 S’il vous plat: 用于请求帮助&#xff0c;例如在需要寻找某个地点或服务时。 询问信息 Excusez-moi: 用…...

Kafka 生产者优化与数据处理经验

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...

MySQL 主从复制之多线程复制

一、MySQL 多线程复制的背景 MySQL 的主从复制延迟一直是受开发者最为关注的问题之一&#xff0c;MySQL 从 5.6 版本开始追加了并行复制功能&#xff0c;目的就是为了改善复制延迟问题&#xff0c;并行复制称为enhanced multi-threaded slave&#xff08;简称MTS&#xff09;。…...

Linux2.6内核进程调度队列

文章目录 前言运行队列 runqueue优先级活动队列过期队列活跃队列 VS 过期队列active指针和expired指针O(1)调度算法 前言 在前面学习并认识了进程之后&#xff0c;我们会发出一个疑问&#xff1a;Linux内核是如何调度进程的呢&#xff1f; 接下来我们就以Linux2.6内核为例深入探…...

Infineon(英飞凌) TLE985xQX 芯片电机工作电流、电压AD采样

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 单片机芯片合集 文章目录 其他系列文章导航 文章目录 前言 一、选取合适的端口 1.通过 OP1、OP2 电流采集运放输入端口进行H桥驱动的电流采集。 2.通过 O_D_VBAT_AD_EN、I_A_VBAT_A…...

Sparrow系列拓展篇:对信号量应用问题的深入讨论

前言 笔者之前已经介绍过了Sparrow信号量的源码&#xff0c;但是对于信号量的使用&#xff0c;并没有讲得非常详细&#xff0c;仅仅讲了同步与互斥的概念。 本章让笔者介绍如何使用Sparrow的信号量&#xff0c;深入探讨一下信号量在同步、计数与互斥中的应用。 使用信号量解…...

图文详解Docker下配置、测试Redis

文章目录 前言实测环境&#xff1a;实验思路&#xff1a; 正文1.准备工作2. 配置、运行 Redis 容器3. 配置测试 总结 前言 配置、测试redis数据库服务器&#xff0c;首先确保正确安装docker&#xff0c;并且已启动运行&#xff0c;具体安装docker方法见笔者前面的博文《OpenEu…...

OpenClaw性能调优:提升Phi-3-vision-128k-instruct多模态任务执行效率

OpenClaw性能调优&#xff1a;提升Phi-3-vision-128k-instruct多模态任务执行效率 1. 问题背景与挑战 去年夏天&#xff0c;当我第一次尝试用OpenClaw驱动Phi-3-vision处理产品截图分析任务时&#xff0c;遭遇了令人抓狂的性能问题——处理20张手机截图竟耗时47分钟。这个效率…...

OpenClaw+千问3.5-35B-A3B-FP8:个人知识库自动化更新系统

OpenClaw千问3.5-35B-A3B-FP8&#xff1a;个人知识库自动化更新系统 1. 为什么需要自动化知识库更新 作为一个长期依赖个人知识库的技术写作者&#xff0c;我深刻体会到手动维护知识库的痛点。每当遇到新资料&#xff0c;我需要经历"阅读→摘录→分类→归档"的全流…...

终极QOR监控和日志指南:保障企业应用稳定运行的完整方案

终极QOR监控和日志指南&#xff1a;保障企业应用稳定运行的完整方案 【免费下载链接】qor QOR is a set of libraries written in Go that abstracts common features needed for business applications, CMSs, and E-commerce systems. 项目地址: https://gitcode.com/gh_mi…...

万字长文带你深入Redis底层数据结构

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

如何在不同的机器上运行多个OpenClaw实例?

想让不同机器上的 OpenClaw 一起协作&#xff0c;其实就是搭建一个跨机器的 “小龙虾通信网络”。实现方式分两种&#xff1a;简单直连&#xff08;适合测试 / 小集群&#xff09;和远程网关&#xff08;适合生产 / 稳定协作&#xff09;。下面给你一套直接能跑的完整方案。一、…...

哪些降重软件可以同时降低查重率和AIGC疑似率?2026届TOP5硬核评测与选择建议

【CSDN 深度评测 / 突破算法封锁的毕业指南】 近期收到太多在读研究生的私信&#xff1a;“学长&#xff0c;我的论文查重率降到了8%&#xff0c;但教务处系统提示‘AIGC疑似率65%’&#xff0c;被打回重头再来&#xff0c;怎么办&#xff1f;” 在2026年的今天&#xff0c;知网…...

ESP8266原生HomeKit接入:零桥接HAP协议实现

1. 项目概述HomeKit-ESP8266 是一个面向 ESP8266 Arduino Core 的原生 Apple HomeKit 配件实现库。它不依赖任何桥接设备&#xff08;如 HomePod、Apple TV 或 Mac&#xff09;&#xff0c;可直接作为独立的 HomeKit 配件接入 iOS/macOS 的“家庭”App。该库并非基于 Apple 官方…...

杰理之开mic关mic复位问题处理【篇】

开PC模式...

CSDN首页发布文章意见反馈

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

YOLOv8目标检测实战:用Shape-IoU损失函数提升小目标识别精度(附代码)

YOLOv8目标检测实战&#xff1a;用Shape-IoU损失函数提升小目标识别精度&#xff08;附代码&#xff09; 在无人机航拍和遥感图像分析领域&#xff0c;小目标检测一直是令人头疼的技术难点。当你在VisDrone数据集上训练YOLOv8模型时&#xff0c;是否遇到过这样的困境&#xff1…...