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

️ Python数据结构深度解析:列表、字典、元组、集合完全指南

引言

Python 提供了四种核心的内置数据结构:列表(List)字典(Dict)元组(Tuple)集合(Set)。它们各有特点,适用于不同的场景。本文将深入剖析这四种数据结构,帮助你掌握它们的用法和最佳实践。

一、列表(List)——有序可变序列

1.1 基本操作

# 创建列表
fruits = ['apple', 'banana', 'cherry']
numbers = [1, 2, 3, 4, 5]
mixed = [1, 'hello', 3.14, True]  # 可混合类型# 索引和切片
print(fruits[0])       # 'apple'
print(fruits[-1])      # 'cherry' (最后一个)
print(fruits[0:2])     # ['apple', 'banana']# 常用方法
fruits.append('orange')        # 末尾添加
fruits.insert(1, 'mango')      # 指定位置插入
fruits.remove('banana')        # 删除指定元素
popped = fruits.pop()          # 删除并返回末尾元素
fruits.sort()                  # 原地排序
fruits.reverse()               # 原地反转

1.2 列表推导式

# 传统方式
squares = []
for x in range(10):squares.append(x**2)# 列表推导式(更Pythonic)
squares = [x**2 for x in range(10)]# 带条件的推导式
evens = [x for x in range(20) if x % 2 == 0]# 嵌套推导式
matrix = [[i*j for j in range(3)] for i in range(3)]
# [[0, 0, 0], [0, 1, 2], [0, 2, 4]]

二、字典(Dict)——键值对映射

2.1 基本操作

# 创建字典
user = {'name': '张三','age': 25,'city': '北京'
}# 访问和修改
print(user['name'])           # '张三'
user['age'] = 26              # 修改值
user['email'] = 'zhang@example.com'  # 添加新键# 安全访问
age = user.get('age', 0)      # 不存在返回默认值0
name = user.pop('name')       # 删除并返回值# 遍历字典
for key in user:              # 遍历键print(key, user[key])for key, value in user.items():  # 遍历键值对print(f"{key}: {value}")for value in user.values():   # 遍历值print(value)

2.2 字典常用技巧

# 合并字典(Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2  # {'a': 1, 'b': 3, 'c': 4}# 字典推导式
squares_dict = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}# fromkeys创建默认字典
keys = ['a', 'b', 'c']
default_dict = dict.fromkeys(keys, 0)  # {'a': 0, 'b': 0, 'c': 0}# defaultdict自动创建默认值
from collections import defaultdict
count = defaultdict(int)
count['apple'] += 1  # 不需要先检查key是否存在

三、元组(Tuple)——不可变有序序列

3.1 基本特性

# 创建元组
t = (1, 2, 3)
t = 1, 2, 3  # 括号可省略
single = (1,)  # 单元素元组需要逗号!# 不可变性
t[0] = 10  # TypeError: 'tuple' object does not support item assignment# 元组解包
a, b, c = t
print(a, b, c)  # 1 2 3# 交换变量(优雅!)
x, y = 10, 20
x, y = y, x  # x=20, y=10# 扩展解包
first, *rest = (1, 2, 3, 4, 5)
print(first)  # 1
print(rest)   # [2, 3, 4, 5]

3.2 元组的使用场景

# 1. 函数返回多个值
def get_min_max(numbers):return min(numbers), max(numbers)minimum, maximum = get_min_max([3, 1, 4, 1, 5])# 2. 作为字典的键(列表不行!)
locations = {(0, 0): '原点',(1, 0): '东',(0, 1): '北'
}# 3. 数据保护
DAYS = ('周一', '周二', '周三', '周四', '周五', '周六', '周日')

四、集合(Set)——无序不重复元素

4.1 基本操作

# 创建集合
s = {1, 2, 3, 3, 3}  # {1, 2, 3} 自动去重
s = set([1, 2, 2, 3, 3, 3])  # 从列表创建
empty = set()  # 空集合(不能是{},那是字典)# 添加和删除
s.add(4)
s.remove(2)       # 不存在会报错
s.discard(10)     # 不存在不会报错
popped = s.pop()  # 随机移除并返回一个元素# 集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}print(a | b)   # 并集: {1, 2, 3, 4, 5, 6}
print(a & b)   # 交集: {3, 4}
print(a - b)   # 差集: {1, 2}
print(a ^ b)   # 对称差集: {1, 2, 5, 6}

4.2 实用场景

# 1. 快速去重
numbers = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(numbers))  # [1, 2, 3, 4]# 2. 成员检测(比列表快得多!)
large_set = set(range(1000000))
999999 in large_set  # O(1) 超快# 3. 集合推导式
squares = {x**2 for x in range(10)}  # {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}# 4. 找共同好友
alice_friends = {'Bob', 'Charlie', 'David'}
bob_friends = {'Alice', 'Charlie', 'Eve'}
common = alice_friends & bob_friends  # {'Charlie'}

五、四种结构对比与选择

特性列表字典元组集合
有序 ✓(Python 3.7+)
可变
可哈希(作key)
重复元素 允许 键唯一 允许 不重复
索引访问 整数索引 键索引 整数索引

总结

掌握这四种数据结构是Python编程的基础:

  • 列表:需要有序可变序列时使用
  • 字典:键值映射,查找最快的结构
  • 元组:不可变数据,适合作为字典键
  • 集合:去重和集合运算的首选

熟练运用它们,能让你的Python代码更加简洁、高效!

本文内容由AI辅助生成,仅供学习参考。

http://www.jsqmd.com/news/519185/

相关文章:

  • PID实战:从理论到代码,一篇搞定电机精准控制!
  • 3.19笔记
  • MySQL技巧(四): EXPLAIN 关键参数详细解释
  • YOLO11 改进 - 基础知识 为什么SPPF比SPP更快?深入解析YOLO中多尺度特征提取的效率优化与代码实现
  • 从单机到分布式:MySQL与GaussDB架构差异详解(附性能测试数据)
  • 初学者指南:基于COMSOL模拟的声子晶体模型与减振降噪的四个复现工作
  • GWAS新手必看:从PLINK到GEMMA的完整分析流程(附代码)
  • 北京上门收画找哪家?丰宝斋免费上门,名家字画安心变现 - 品牌排行榜单
  • 合宙ESP32-C3深度睡眠唤醒失效的排查与修复实录
  • WAL日志同步技术:保障TDengine时序数据库宕机恢复可靠性的核心机制
  • 捷报传来!极限科技 Coco AI 团队荣获第二届“兴智杯”总决赛二等奖
  • 游戏开发者必看:深度缓冲(DepthBuffer)在Unity中的5个实战技巧
  • ZJCTF 2019 EasyHeap
  • AMD FSR 1.0源码实战:手把手教你实现边缘自适应升频(附完整代码解析)
  • Redis桌面管理神器+Win服务配置:从安装到可视化监控全流程
  • 1 吨燃气蒸汽锅炉 全套配置 包安装
  • OceanBase存储过程避坑指南:LLVM编译执行原理与常见错误解决
  • 工业机器人控制精度上不去?可能是动力学参数辨识没做好(从原理到避坑指南)
  • 我的世界皮肤格式转换神器SkinConvertingSheep使用指南(附下载链接)
  • web第三周笔记 - feng
  • 安卓逆向实战:用Node.js一键清理混淆dex中的Unicode垃圾代码(附完整工具链)
  • 避坑指南:LLM提示词设计中的RASCEF框架五大常见误用场景
  • 食品厂 1 吨燃气蒸汽锅炉 全套配齐 包安装包环评
  • MobaXterm专业版隐藏功能实测:宏录制+批量命令如何提升运维效率?
  • Windows11+WSL2+Ubuntu22.04环境下,5分钟搞定Qemu虚拟VExpress-A9开发板环境配置
  • 开源AI神器OpenClaw(小龙虾)保姆级部署全解析:零付费、零代码,人人可上手的本地AI助手
  • [ZJCTF 2019]EasyHeap
  • Ubuntu14.04 Samba共享文件夹Windows访问失败的5个常见原因及解决方案
  • CC2530 ZigBee无线组网实战:从ZStack协议栈到智能农业应用
  • 从路径遍历到RCE:深度剖析Ollama CVE-2024-37032漏洞原理与利用链