2025-08-21 Python进阶2——数据结构

文章目录

  • 1 列表(List)
    • 1.1 列表常用方法
    • 1.2 列表的特殊用途
      • 1.2.1 实现堆栈(后进先出)
      • 1.2.2 实现队列(先进先出)
    • 1.3 列表推导式
    • 1.4 嵌套列表推导式
  • 2 del 语句
  • 3 元组(Tuple)
  • 4 集合(Set)
    • 4.1 集合操作
    • 4.2 集合推导式
  • 5 字典(Dictionary)
    • 5.1 字典基本操作
    • 5.2 字典创建方式
    • 5.3 字典遍历
  • 6 循环技巧
    • 6.1 遍历字典
    • 6.2 带索引遍历序列
    • 6.3 同时遍历多个序列
    • 6.4 反向遍历
    • 6.5 排序遍历
  • 7 序列比较

1 列表(List)

列表是 Python 中最常用的数据结构之一,是有序、可变的元素集合,支持多种操作方法。

1.1 列表常用方法

方法功能描述
list.append(x)在列表末尾添加元素 x
list.extend(iterable)扩展列表,添加可迭代对象的所有元素
list.insert(i, x)在索引 i 处插入元素 x
list.remove(x)删除第一个值为 x 的元素
list.pop([i])移除并返回索引 i 处的元素(默认最后一个)
list.clear()清空列表
list.index(x[, start[, end]])返回 x 第一次出现的索引
list.count(x)统计 x 在列表中出现的次数
list.sort(key=None, reverse=False)就地排序列表
list.reverse()反转列表元素
list.copy()返回列表的浅拷贝

示例

fruits = ['orange', 'apple', 'pear', 'banana']
print(fruits.count('apple'))  # 1
print(fruits.index('banana'))  # 3fruits.append('grape')
fruits.sort()
print(fruits)  # ['apple', 'banana', 'grape', 'orange', 'pear']fruits.reverse()
print(fruits)  # ['pear', 'orange', 'grape', 'banana', 'apple']

1.2 列表的特殊用途

1.2.1 实现堆栈(后进先出)

stack = [3, 4, 5]
stack.append(6)  # 入栈
stack.append(7)
print(stack)  # [3, 4, 5, 6, 7]print(stack.pop())  # 7(出栈)
print(stack)  # [3, 4, 5, 6]

1.2.2 实现队列(先进先出)

列表作为队列效率较低,推荐使用collections.deque

from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry")  # 入队
queue.append("Graham")print(queue.popleft())  # 'Eric'(出队)
print(queue)  # deque(['John', 'Michael', 'Terry', 'Graham'])

1.3 列表推导式

简洁创建列表的方式,格式:[表达式 for 变量 in 可迭代对象 if 条件]

示例

# 创建平方列表
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 过滤偶数
even_numbers = [x for x in range(20) if x % 2 == 0]
print(even_numbers)  # [0, 2, 4, ..., 18]# 处理字符串列表
words = ['  apple', 'banana  ', '  cherry  ']
stripped = [word.strip() for word in words]
print(stripped)  # ['apple', 'banana', 'cherry']

1.4 嵌套列表推导式

用于处理复杂结构,如矩阵转置:

# 3x4矩阵
matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],
]# 转置矩阵(行变列)
transposed = [[row[i] for row in matrix] for i in range(4)]
print(transposed)  # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

2 del 语句

用于删除列表元素、切片或变量:

a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]  # 删除索引0的元素
print(a)  # [1, 66.25, 333, 333, 1234.5]del a[2:4]  # 删除切片
print(a)  # [1, 66.25, 1234.5]del a[:]  # 清空列表
print(a)  # []del a  # 删除变量a

3 元组(Tuple)

元组是有序、不可变的元素集合,用逗号分隔,通常用圆括号包裹。

  • 不可变:创建后不能修改元素
  • 可包含任意类型元素,包括可变对象
  • 支持索引和切片操作
  • 可用于打包和解包

示例

t = 12345, 54321, 'hello!'  # 元组打包
print(t[0])  # 12345# 元组嵌套
u = t, (1, 2, 3, 4, 5)
print(u)  # ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))# 元组解包
x, y, z = t
print(x, y, z)  # 12345 54321 hello!# 单元素元组(注意逗号)
singleton = 'hello',
print(singleton)  # ('hello',)

4 集合(Set)

集合是无序、不重复的元素集合,支持数学集合运算。

4.1 集合操作

basket = {'apple', 'orange', 'apple', 'pear'}
print(basket)  # {'orange', 'pear', 'apple'}(自动去重)# 成员检测
print('orange' in basket)  # True# 集合运算
a = set('abracadabra')
b = set('alacazam')
print(a - b)  # 差集:{'r', 'd', 'b'}
print(a | b)  # 并集:{'a','c','r','d','b','m','z','l'}
print(a & b)  # 交集:{'a', 'c'}
print(a ^ b)  # 对称差集:{'r','d','b','m','z','l'}

4.2 集合推导式

# 创建不包含某些元素的集合
a = {x for x in 'abracadabra' if x not in 'abc'}
print(a)  # {'r', 'd'}

5 字典(Dictionary)

字典是键值对的无序集合,键必须唯一且不可变,值可以是任意类型。

5.1 字典基本操作

tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127  # 添加键值对
print(tel)  # {'jack': 4098, 'sape': 4139, 'guido': 4127}print(tel['jack'])  # 4098(访问值)del tel['sape']  # 删除键值对
print(list(tel))  # ['jack', 'guido'](获取键列表)

5.2 字典创建方式

# 1. 直接创建
d1 = {'name': 'Alice', 'age': 30}# 2. 使用dict()构造函数
d2 = dict([('name', 'Bob'), ('age', 25)])# 3. 字典推导式
d3 = {x: x*2 for x in range(3)}  # {0:0, 1:2, 2:4}# 4. 关键字参数
d4 = dict(name='Charlie', age=35)

5.3 字典遍历

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():  # 同时获取键和值print(k, v)

6 循环技巧

6.1 遍历字典

for k, v in knights.items():print(k, v)

6.2 带索引遍历序列

for i, v in enumerate(['tic', 'tac', 'toe']):print(i, v)  # 0 tic, 1 tac, 2 toe

6.3 同时遍历多个序列

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):print(f"What is your {q}? It is {a}.")

6.4 反向遍历

for i in reversed(range(1, 10, 2)):print(i)  # 9,7,5,3,1

6.5 排序遍历

basket = ['apple', 'orange', 'apple', 'pear']
for f in sorted(set(basket)):  # 去重并排序print(f)  # apple, banana, orange, pear

7 序列比较

序列比较使用字典式顺序:

  • 比较对应位置元素,直到找到不同元素
  • 短序列是长序列的前缀则短序列更小
  • 支持同类型序列比较
(1, 2, 3) < (1, 2, 4)  # True
[1, 2, 3] < [1, 2, 4]  # True
'ABC' < 'C' < 'Pascal' < 'Python'  # True
(1, 2, 3) == (1.0, 2.0, 3.0)  # True

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93918.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别手工编写测试脚本!Claude+Playwright MCP快速生成自动化测试脚本

在进行自动化测试时&#xff0c;前端页面因为频繁迭代UI 结构常有变动&#xff0c;这往往使得自动化测试的脚本往往“写得快、废得也快”&#xff0c;维护成本极高。在大模型之前大家往往都会使用录制类工具&#xff0c;但录制类工具生成的代码灵活性较差、定位方式不太合理只能…

一款更适合 SpringBoot 的API文档新选择(Spring Boot 应用 API 文档)

SpringDoc&#xff1a;Spring Boot 应用 API 文档生成的现代化解决方案 概述 SpringDoc 是一个专为 Spring Boot 应用设计的开源库&#xff0c;能够自动生成符合 OpenAPI 3 规范的 API 文档。它通过扫描项目中的控制器、方法注解及相关配置&#xff0c;动态生成 JSON/YAML/HTML…

文献阅读 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 来自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React学习(九)

目录&#xff1a;1.react-进阶-antd-新增2.react-进阶-antd-删除选中1.react-进阶-antd-新增新增代码&#xff0c;跟需改的代码类似&#xff0c;直接copy修改组件代码进行修改userEffect可以先带着&#xff0c;没啥用A6组件用到的函数跟修改的也类似&#xff1a;这个useEffect函…

零基础从头教学Linux(Day 17)

三层交换机一、三层交换机的配置1.关于如何配置三层交换机&#xff0c;首先我们应该先创建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任务十四 推荐页面接口开发

一、接口准备 在对接qq音乐接口之前,首先要将之前的项目,一定要记得备份一份; 备份完成之后,首先要在vscode终端安装axios,这个是请求后端的工具,和之前的ajax一样,都是请求后端的工具。只不过axios更专业化,跟强大 至于qq音乐接口怎么获取,一般有两个途径,第一个是…

医疗AI与医院数据仓库的智能化升级:异构采集、精准评估与高效交互的融合方向(下)

核心功能创新详解: 统一门户与角色化工作台: 统一入口: 用户通过单一URL登录,系统根据其角色和权限自动呈现专属工作台。 角色化工作台: 临床医生工作台: 首屏展示常用患者查询入口、快速统计(如“我的患者检验异常趋势”)、相关临床文献推荐、待处理任务(如报告审核)…

数据库面试常见问题

数据库 Delete Truncate Drop 区别 答:这三个操作都是针对数据库的表进行操作,都有删除表的功能,其中的区别在于: Delete:只将表中的数据进行删除,不删除定义不释放空间,是dml语句,需要提交事务,如果不想删除可以回滚。delete每次删除一行,并在事务日志中为所删除…

用nohup setsid绕过超时断连,稳定反弹Shell

在We渗透过程中&#xff0c;我们常常会利用目标系统的远程代码执行&#xff08;RCE&#xff09;漏洞进行反弹Shell。然而&#xff0c;由于Web服务器&#xff08;如PHP、Python后端&#xff09;的执行环境通常存在超时限制&#xff08;如max_execution_time或进程管理策略&#…

Java设计模式-模板方法模式

Java设计模式-模板方法模式 模式概述 模板方法模式简介 核心思想&#xff1a;定义一个操作中的算法骨架&#xff08;模板方法&#xff09;&#xff0c;将算法中某些步骤的具体实现延迟到子类中完成。子类可以在不改变算法整体结构的前提下&#xff0c;重定义这些步骤的行为&…

Centos7物理安装 Redis8.2.0

Centos7物理安装 Redis8.2.0一、准备依赖环境首先安装编译 Redis 所需的依赖&#xff1a;# CentOS/RHEL系统 yum install -y gcc gcc-c make wget 二、下载并编译 Redis 8.2.0# 1. 下载Redis 8.2.0源码包 wget https://download.redis.io/releases/redis-8.2.0.tar.gz# 2. 解压…

牛津大学xDeepMind 自然语言处理(3)

条件语言模型无条件语言模型 概率计算&#xff1a;通过链式法则分解为预测下一词概率&#xff08;将语言建模问题简化为建模给定前面词语历史的下一个词的概率&#xff09;基于循环神经网络的无条件语言模型&#xff1a;根据历史词语预测下一个词的概率条件语言模型 定义&#…

Vue2.x核心技术与实战(一)

目录 一、Vue2.x:快速上手+插值表达式+指令上 1.1 Vue快速上手 1.1.1 Vue概念 1.1.2 创建实例 1.1.3 插值表达式 { { }} 1.1.4 响应式特性 1.1.5 开发者工具 1.2 Vue指令 1.2.1 v-html 1.2.3 v-show / v-if v-show v-if 1.2.4 v-else / v-else-if 1.2.5 v-on v…

SCAU学习笔记 - 自科三面前端方向实战演示

本来是准备写完二面直接开始写算法三面的&#xff0c;maimai那个封面图我都做好了。但是可恶的出题人说要等我出完解析再针对性避开出题&#xff0c;所以swan决定把那个先搁置&#xff0c;本文我们先以2023年的自科三面前端方向题为例带各位快速入门前端三件套&#xff08;因为…

前后端联合实现文件上传,实现 SQL Server image 类型文件上传

1、前端 Vue3QualityFileInfoDialog.vue<script setup lang"ts" name"QualityFile"> ...... // 上传&#xff0c;防抖 const onUploadClick debounce(() > {// 模拟点击元素if (fileInputRef.value) {// 重置以允许重复选择相同文件fileInputRef…

使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)

这是一个对延迟和稳定性要求很高的场景。 核心原理是&#xff1a;利用USB数据线&#xff0c;在手机和电脑之间创建一个高速的“虚拟网络连接”&#xff0c;然后在这个稳定的网络通道上运行远程控制软件。 方案1&#xff1a; 在完全没有无线网络&#xff08;Wi-Fi&#xff09;和…

linux报permission denied问题

linux报permission denied问题 一般是没有可执行权限&#xff0c;需要先添加执行权限 1. 确认文件权限 在你的项目目录下执行&#xff1a; ls -l ./folder你可能会看到类似&#xff1a; -rw-r--r-- 1 user user 1234 Aug 18 12:00 script.sh注意&#xff1a;这里缺少 x&#xf…

Vue深入组件:组件事件详解2

声明触发的事件 为了让组件的用法更清晰(作为文档),同时让 Vue 能区分事件与透传 attribute,推荐显式声明组件要触发的事件。根据组件是否使用 <script setup>,声明方式有所不同。 使用 <script setup> 时:defineEmits() 宏 在 <script setup> 中,…

FLASK项目快速构建

Flask 项目构建 exts.py # flask_sqlalchemy from flask_sqlalchemy import SQLAlchemy from flask_mail import Mail from flask_caching import Cache from flask_wtf import CSRFProtect from flask_avatars import Avatars from flask_jwt_extended import JWTManager from…

数据结构--2:ArrayList与顺序表

1.顺序表的创建 2.常见操作 3.遍历 4.扩容机制 5.例子1.顺序表的创建在集合框架中&#xff0c;ArrayList是⼀个普通的类&#xff0c;实现了List接口&#xff0c;具体框架图如下&#xff1a;2.常见操作代码…