Python 数据结构知识汇总:str、list、tuple、dict、set
由于前几天给大家介绍过字符串,元组,列表,字典.今天给大家介绍集合.同时对前几天的知识进行汇总,Python 提供了多种内置数据结构用于存储和组织数据。不同的数据结构有不同的特点和适用场景选择合适的结构能让代码更简洁、效率更高。这篇文章将系统性地对比和汇总 Python 中五种最常用的数据结构字符串str、列表list、元组tuple、字典dict和集合set。一、总体对比在深入了解每种结构之前先通过一张表格建立整体认识特性strlisttupledictset是否可变不可变可变不可变可变可变是否有序有序有序有序有序Python 3.7无序是否允许重复允许允许允许键唯一元素唯一元素类型字符任意任意键值对任意二、字符串str字符串是不可变的字符序列用引号括起来表示。定义方式# 单引号、双引号、三引号 s1 hello s2 world s3 多行字符串 核心特性s Python # 索引正向从0开始负向从-1开始 print(s[0]) # P print(s[-1]) # n # 切片 [start:end:step] print(s[1:4]) # yth print(s[::-1]) # nohtyP反转 # 不可变性 # s[0] J # TypeError常用方法方法分类常用方法大小写转换upper()、lower()、capitalize()、title()去除空白strip()、lstrip()、rstrip()查找判断find()、index()、startswith()、endswith()、count()拆分拼接split()、join()替换replace()类型判断isalpha()、isdigit()、isalnum()、isspace()text Hello, World! print(text.strip()) # Hello, World! print(text.lower()) # hello, world! print(text.replace(World, Python)) # Hello, Python! print(text.split(,)) # [ Hello, World! ]格式化name 张三 age 25 # f-string print(f我叫{name}今年{age}岁) # format() 方法 print(我叫{}今年{}岁.format(name, age)) # % 格式化 print(我叫%s今年%d岁 % (name, age))三、列表list列表是可变的有序序列用方括号[]表示可以存放任意类型的元素。定义方式# 直接定义 nums [1, 2, 3, 4, 5] mixed [1, hello, 3.14, [1, 2]] # 空列表 empty [] # list() 构造 chars list(abc) # [a, b, c] r list(range(5)) # [0, 1, 2, 3, 4] # 列表推导式 squares [x**2 for x in range(1, 6)] # [1, 4, 9, 16, 25]核心操作nums [1, 2, 3, 4, 5] # 索引访问和修改 print(nums[0]) # 1 nums[2] 99 # [1, 2, 99, 4, 5] # 切片 print(nums[1:4]) # [2, 99, 4] print(nums[::-1]) # [5, 4, 99, 2, 1]常用方法操作类型方法添加append()、insert()、extend()删除pop()、remove()、clear()查找index()、count()、in排序sort()、reverse()、sorted()、reversed()nums [1, 2, 3] # 添加 nums.append(4) # [1, 2, 3, 4] nums.insert(0, 0) # [0, 1, 2, 3, 4] nums.extend([5, 6]) # [0, 1, 2, 3, 4, 5, 6] # 删除 last nums.pop() # 6nums变为 [0, 1, 2, 3, 4, 5] nums.remove(3) # [0, 1, 2, 4, 5] # 查找 print(nums.index(4)) # 3 print(2 in nums) # True列表复制a [1, 2, 3] # 引用赋值错误 b a b.append(4) print(a) # [1, 2, 3, 4] 原列表被修改 # 浅拷贝正确 a [1, 2, 3] b a[:] # 或 list(a) 或 a.copy() b.append(4) print(a) # [1, 2, 3] 原列表不变四、元组tuple元组是不可变的有序序列用圆括号()表示。与列表类似但创建后不能修改。定义方式# 直接定义 t1 (1, 2, 3) t2 (a, b, c) # 单元素元组注意逗号 t3 (1,) # 正确类型为 tuple t4 (1) # 错误类型为 int # 不加括号也可以 t5 1, 2, 3 # (1, 2, 3) # tuple() 构造 t6 tuple([1, 2, 3]) # (1, 2, 3)核心特性t (1, 2, 3, 4, 5) # 索引和切片与列表相同 print(t[0]) # 1 print(t[1:4]) # (2, 3, 4) # 不可变性 # t[0] 10 # TypeError: tuple object does not support item assignment # 元组可以包含可变元素 t (1, 2, [3, 4]) t[2].append(5) # (1, 2, [3, 4, 5]) 元组本身不变但内部列表变了元组的常用操作由于元组不可变它的方法比列表少方法说明count()统计元素出现次数index()查找元素索引in判断元素是否存在t (1, 2, 3, 2, 4, 2) print(t.count(2)) # 3 print(t.index(3)) # 2 print(4 in t) # True元组的解包t (1, 2, 3) a, b, c t print(a, b, c) # 1 2 3 # 配合 enumerate 使用 for index, value in enumerate([10, 20, 30]): print(index, value) # 0 10, 1 20, 2 30五、字典dict字典是可变的键值对集合用花括号{}表示。键必须是不可变类型且唯一值可以是任意类型。定义方式# 直接定义 person {name: 张三, age: 25, city: 北京} # 空字典 empty {} # dict() 构造 person dict(name李四, age30) # {name: 李四, age: 30} person dict([(name, 王五), (age, 28)]) # 从键值对列表 # 字典推导式 squares {x: x**2 for x in range(1, 6)} # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}核心操作person {name: 张三, age: 25} # 访问推荐使用 get 安全访问 print(person[name]) # 张三 print(person.get(city, 未知)) # 未知不存在返回默认值 # 添加/修改 person[city] 北京 # 添加 person[age] 26 # 修改 # 删除 del person[city] # 删除指定键 age person.pop(age) # 删除并返回值 person.clear() # 清空常用方法操作类型方法访问get()、setdefault()修改update()删除pop()、popitem()、clear()遍历keys()、values()、items()复制copy()、deepcopy()字典遍历person {name: 张三, age: 25, city: 北京} # 遍历键 for key in person: print(key) # 遍历值 for value in person.values(): print(value) # 同时遍历键和值最常用 for key, value in person.items(): print(f{key}: {value})字典与JSON字典与JSON格式天然对应可通过json模块互转import json # 字典 → JSON字符串序列化 data {name: 张三, age: 25, scores: [85, 92]} json_str json.dumps(data, ensure_asciiFalse, indent2) # JSON字符串 → 字典反序列化 data json.loads(json_str)六、集合set集合是可变的无序集合元素唯一且必须是可哈希不可变类型。用花括号{}表示但注意空集合必须用set()创建。定义方式# 直接定义 s {1, 2, 3, 4, 5} mixed {1, hello, 3.14, (1, 2)} # 元组可以列表不可以 # 空集合注意{} 是空字典 empty set() # set() 构造 s set([1, 2, 2, 3, 3, 3]) # {1, 2, 3} 自动去重 s set(hello) # {h, e, l, o}核心特性s {1, 2, 3, 4, 5} # 自动去重 s {1, 1, 2, 2, 3} # {1, 2, 3} # 无序性不支持索引 # print(s[0]) # TypeError: set object is not subscriptable # 添加和删除 s.add(6) # {1, 2, 3, 4, 5, 6} s.remove(3) # {1, 2, 4, 5, 6} 不存在会报错 s.discard(10) # 不存在也不会报错 s.pop() # 删除并返回一个任意元素集合运算集合支持数学上的各种集合运算运算方法说明并集union()两个集合的所有元素交集intersection()两个集合共有的元素差集difference()属于前者不属于后者的元素对称差集symmetric_difference()属于任意一个但不同时属于两者的元素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} 差集属于a不属于b print(a ^ b) # {1, 2, 5, 6} 对称差集集合的常用场景# 1. 列表去重 nums [1, 2, 2, 3, 3, 3, 4] unique list(set(nums)) # [1, 2, 3, 4] # 2. 快速判断元素是否存在 s {1, 2, 3, 4, 5} print(3 in s) # True集合的 in 操作比列表快得多 # 3. 寻找共同好友/共同标签 friends_a {张三, 李四, 王五} friends_b {李四, 王五, 赵六} common friends_a friends_b # {李四, 王五}七、五种数据结构对比总结特性strlisttupledictset可变性不可变可变不可变可变可变有序性有序有序有序有序无序元素重复允许允许允许键唯一元素唯一元素类型字符任意任意键值对可哈希类型索引访问可以可以可以用键访问不可以定义空对象[](){}set()适用场景文本处理有序数据序列不可变数据序列键值映射、配置去重、集合运算八、选择指南根据实际需求选择合适的数据结构# 1. 处理文本 → str text Hello, World! # 2. 需要存储有序的多个值且可能修改 → list scores [85, 92, 78, 90] # 3. 需要存储有序的多个值且不会被修改 → tuple coordinates (10, 20) # 4. 需要通过键快速查找对应的值 → dict user {id: 1001, name: 张三, status: active} # 5. 需要去重或进行集合运算 → set tags {python, data, analysis}九、类型转换速查目标类型转换方法转字符串str(obj)转列表list(obj)转元组tuple(obj)转字典需要键值对格式转集合set(obj)自动去重s hello print(list(s)) # [h, e, l, l, o] print(tuple(s)) # (h, e, l, l, o) print(set(s)) # {h, e, l, o} 去重后 lst [(a, 1), (b, 2)] print(dict(lst)) # {a: 1, b: 2}十、总结Python 的五大核心数据结构各有特点和适用场景掌握它们之间的区别和联系是写出高质量Python代码的基础str不可变字符序列专注文本处理list可变有序序列使用频率最高tuple不可变有序序列比列表更轻量、更安全dict可变键值映射通过键快速查找set可变无序集合自动去重 集合运算理解每种结构的特点在实际编码中选出最合适的那一个代码会变得更清晰、更高效。如果觉得这篇内容对你有帮助欢迎收藏备用。

相关新闻

MacBook隐形架构解析:性能背后的设计哲学

MacBook隐形架构解析:性能背后的设计哲学

1. MacBook设计哲学的五个隐形架构支柱当大多数人谈论MacBook时,首先想到的是视网膜显示屏、Unibody机身或者macOS系统这些看得见摸得着的特性。但真正让MacBook在专业领域持续领先的,是那些用户几乎感受不到却时刻在发挥作用的基础架构决策。这些设计选…

2026/7/23 21:20:14 阅读更多 →
医用温控仪读数乱屏死机?抗干扰兼容高性价比方案

医用温控仪读数乱屏死机?抗干扰兼容高性价比方案

做医用温控仪器研发、采购的同行都清楚,恒温培养箱、高温灭菌柜、医用恒温水浴、输液加温仪这一类设备,有三大绕不开的选型痛点。第一,设备内部加热继电器、变频风机频繁通断,手术室、检验科还有超声、电刀等设备产生强电磁辐射&a…

2026/7/22 4:30:30 阅读更多 →
Node.js API兼容性问题解析与解决方案

Node.js API兼容性问题解析与解决方案

1. Node.js API兼容性现状解析作为从Node.js 0.10时代就开始使用的老开发者,我亲眼见证了Node.js生态系统的快速演进。每次大版本升级,最让人头疼的不是新功能的学习,而是那些"突然消失"或"行为突变"的API。当前Node.js最…

2026/7/22 4:30:30 阅读更多 →

最新新闻

Google Python 代码注释与文档字符串风格完全指南

Google Python 代码注释与文档字符串风格完全指南

本文基于 Google 官方 Python 风格指南,系统梳理 Python 代码中注释、文档字符串、TODO 的完整规范,包含正反示例与最佳实践,可作为团队代码规范与个人知识库归档。一、为什么需要统一的注释风格注释是代码可读性的核心保障。好的注释不描述代…

2026/7/23 21:19:54 阅读更多 →
python中的数据类型

python中的数据类型

今日的主要内容为:Python的基本数据类型 Python整数进制转换Python数据类型转换函数一、Python的基本数据类型1、数字类型(1)int例:1、2、3、4、5、6...等等,在Python中,整数变量的定义可以使用int进行定义…

2026/7/23 21:19:54 阅读更多 →
深入解析TMS320F28x内存映射与哈佛总线架构:性能优化与实战指南

深入解析TMS320F28x内存映射与哈佛总线架构:性能优化与实战指南

1. 项目概述:为什么需要深入理解F28x的内存与总线?如果你正在使用TI的TMS320F28x系列DSP进行电机控制、数字电源或者任何对实时性要求苛刻的嵌入式开发,那么你迟早会碰到一个核心问题:为什么我的代码跑得不够快?或者&a…

2026/7/23 21:19:54 阅读更多 →
深入解析TMS320F281x DSP系统控制模块:时钟、看门狗与低功耗实战

深入解析TMS320F281x DSP系统控制模块:时钟、看门狗与低功耗实战

1. 项目概述与核心价值在搞嵌入式开发,尤其是像电机控制、数字电源这类对实时性和功耗都极其敏感的领域,选对一颗DSP只是第一步,真正决定系统稳定性和效率的,往往是那些最基础的模块——系统时钟和电源管理。我这些年用TI的C2000系…

2026/7/23 21:19:54 阅读更多 →
TMS320R281x DSP核心通信外设(eCAN/McBSP/SCI/SPI)配置与避坑指南

TMS320R281x DSP核心通信外设(eCAN/McBSP/SCI/SPI)配置与避坑指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是工业控制、电机驱动和汽车电子这些对实时性和可靠性要求极高的领域,德州仪器(TI)的TMS320R281x系列DSP一直是工程师手中的利器。我接触这个系列芯片超过十年,从早期的F28…

2026/7/23 21:19:54 阅读更多 →
做知识付费/有声书用什么配音软件?2026年长文本TTS批量生成实测

做知识付费/有声书用什么配音软件?2026年长文本TTS批量生成实测

做知识付费/有声书用什么配音软件?2026年长文本TTS批量生成实测 核心结论:如果你跟我一样在做线上课或有声书,千万别用那些只能粘几千字的小工具。批量处理能力和SSML长文本稳定性是第一指标。实测下来,fuym.cn 浮云梦配音&#…

2026/7/23 21:18:54 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻