开篇碎碎念玩Python的小伙伴大概率都有过这种经历代码报错满天飞排查半天最后发现是数据结构用错了。想存文本用了列表、想去重用了字典、想固定数据用了可变列表……一步错步步错。Python 最核心、使用率100%的五大内置数据结构str、list、tuple、dict、set堪称Python的五大门派。它们各自有专属脾气、专属场景、专属坑点吃透这五个你写代码至少少踩80%的基础坑。今天用严谨不枯燥、通俗不敷衍的方式一次性汇总所有核心知识点、常用代码、避坑指南和选型技巧新手老手都适用。1. str 字符串——老实本分的“只读文本打工人”核心定位字符串 str 是Python的文本专属容器用单引号、双引号、三引号包裹是一个有序、不可变的字符序列。重点记住不可变是它的最大人设一旦创建内部字符绝不允许原地修改。核心特性干货牢记有序可索引支持下标取值、切片操作精准截取任意字符彻底不可变任何修改、替换、拼接操作都是生成新字符串原字符串纹丝不动元素单一只能存储Unicode字符数字、符号、汉字都算字符不能存其他数据类型可遍历支持for循环逐个读取字符高频常用操作日常编码够用版s Hello Python! 索引切片左闭右开 print(s[0]) # 取首个字符H print(s[1:5]) # 切片截取ello 常用万能方法 s.upper() # 全部转大写 s.lower() # 全部转小写 s.strip() # 去除首尾空格、换行符、制表符 s.split( ) # 按空格分割返回列表 |.join([1,2,3]) # 列表拼接为字符串 s.find(Python) # 查找字符下标无匹配返回-1 s.replace(Hello,Hi) # 字符替换避坑指南 适用场景❌ 千万别用 循环拼接大量字符串因为不可变特性每次拼接都会新建对象性能爆炸。✅ 海量拼接优先用 join()效率直接拉满。适用场景所有文本处理场景日志解析、文案存储、接口传参、文件名称处理等。2. list 列表——随心所欲的“万能可变收纳盒”核心定位列表 list 是Python最万能、最常用的容器用 [] 定义主打一个有序、可变、包容万物。如果不明确该用什么容器无脑选列表大概率不会错堪称数据容器里的“万金油”。核心特性可变可修改支持原地增、删、改、查无需生成新对象有序可重复元素有固定顺序允许存在多个一模一样的元素包容性极强数字、字符串、元组、字典、甚至嵌套列表通通能存支持索引切片灵活取值适配各种数据读取需求高频常用操作lst [1, 2, 3] lst.append(4) # 尾部追加元素最常用 lst.insert(0, 0) # 指定下标插入元素 lst.pop() # 删除尾部元素返回被删除的值 lst.pop(1) # 删除指定下标元素 lst.remove(2) # 删除第一个匹配的目标元素 lst.sort() # 原地升序排序 lst.reverse() # 原地反转列表 lst.extend([5,6]) # 合并另一个序列批量追加避坑指南 适用场景❌ 列表是可变对象直接赋值属于浅拷贝修改新列表会影响原列表。✅ 需要独立数据时用切片或copy方法拷贝。适用场景有序数据集存储、频繁增删数据、临时存储批量数据、循环遍历取值。3. tuple 元组——顽固守规矩的“只读固定套餐”核心定位元组 tuple 用 () 定义和列表是“亲兄弟”唯一且最大的区别天生不可变。如果说列表是可随意改动的草稿元组就是打印好的正式文件定稿后绝不允许修改。核心特性全员不可变无法增、删、改元素数据安全不被篡改有序可重复保留元素顺序允许重复数据可哈希能当做字典的key、集合的元素列表绝对做不到特殊彩蛋元组嵌套列表时外层元组不可变内部列表依然可以修改t (1, [2, 3]) t[1].append(4) # 合法内部列表可修改 print(t) # (1, [2, 3, 4])高频常用操作因为不可变元组没有任何增删改方法仅支持查询类操作t (1, 2, 2, 3) print(t.count(2)) # 统计元素出现次数 print(t.index(3)) # 查找元素对应下标避坑指南 适用场景❌ 单元素元组必须写 (x,)只写 (x) 会被判定为普通括号不是元组。适用场景固定不变的常量数据、函数多返回值、字典key、防止数据被意外篡改的场景。4. dict 字典——精准高效的“查表映射神器”核心定位字典 dict 用 {key: value} 定义是Python的键值对映射容器。主打一个按key精准查找速度秒杀列表遍历堪称数据查询界的搜索引擎。Python3.7及以上版本字典默认保留插入顺序。核心特性key严格要求必须是可哈希类型str/int/tuple列表、集合、字典不能当keykey唯一不重复重复赋值会直接覆盖旧值value无限制可重复、可存任意类型数据查询效率极高基于哈希表实现无论数据量多大查找速度基本恒定可变容器支持动态增删改键值对高频常用操作d {name: 张三, age: 20} d[name] # 直接取值key不存在直接报错 d.get(gender, 未知) # 安全取值无key返回默认值推荐 d.keys() # 获取所有键 d.values() # 获取所有值 d.items() # 获取所有键值对遍历必备 d.pop(age) # 删除指定键返回对应value d.update({gender: 男}) # 批量更新/新增键值对避坑指南 适用场景❌ 遍历字典时默认遍历的是key不是value。❌ 千万不要用可变类型做字典key直接报错。适用场景一对一映射数据存储、配置参数、用户信息、ID对应关系、需要快速精准查询的场景。5. set 集合——洁癖专治的“去重对比小能手”核心定位集合 set 用 {元素} 或 set() 定义主打自动去重、集合运算是自带洁癖的数据容器。注意空集合只能用 set(){} 是空字典别搞混核心特性元素绝对唯一自动剔除重复数据去重效率天花板无序无下标不支持索引、切片无法单独取某个元素元素可哈希不能存储列表、字典、集合等可变类型数据支持数学集合运算轻松实现交、并、差集对比高频常用操作s1 {1, 2, 3} s2 {3, 4, 5} s1.add(6) # 添加单个元素 s1.remove(2) # 删除元素不存在则报错 s1.discard(99) # 安全删除不存在不报错 核心集合运算 print(s1 | s2) # 并集合并两个集合去重 print(s1 s2) # 交集取出两个集合共有元素 print(s1 - s2) # 差集取出s1独有、s2没有的元素 print(s1 ^ s2) # 对称差集双方各自独有元素避坑指南 适用场景❌ 集合无序不能通过下标取值需要有序数据请转列表。适用场景批量数据去重、两组数据对比、筛选交集/差异数据、成员快速判断。终极对比表一张图吃透所有区别数据类型是否有序是否可变元素可否重复索引访问核心用途str 字符串有序不可变可重复支持文本存储与处理list 列表有序可变可重复支持有序可变数据存储tuple 元组有序不可变可重复支持固定常量、安全数据存储dict 字典插入有序可变key唯一value可重复按键查询键值映射、快速查表set 集合无序可变不可重复不支持数据去重、集合对比极简选型口诀直接照抄够用处理文字、文本内容 → str存有序数据、需要频繁增删改 → list数据固定、禁止被修改 → tuple存对应关系、需要快速查找数据 → dict数据去重、对比两组数据差异 → set高频易错终极避坑总结不可变类型str/tuple所有修改操作都不会改动原对象只会生成新对象可哈希禁忌dict的key、set的元素绝对不能用list/set/dict空容器误区[]空列表、{}空字典、set()空集合切勿混淆字符串拼接禁忌循环拼接不用 优先 join()字典遍历误区默认遍历key需要键值对务必用items()结尾小结这五大数据结构是Python的地基没有花里胡哨的高阶语法却是所有项目、算法、爬虫、数据分析的核心基础。搞懂它们的特性、差异和适用场景写代码不再凭感觉选型精准、报错更少、代码更优雅。
Python五大核心数据结构保姆级汇总|str/list/tuple/dict/set 一次吃透
开篇碎碎念玩Python的小伙伴大概率都有过这种经历代码报错满天飞排查半天最后发现是数据结构用错了。想存文本用了列表、想去重用了字典、想固定数据用了可变列表……一步错步步错。Python 最核心、使用率100%的五大内置数据结构str、list、tuple、dict、set堪称Python的五大门派。它们各自有专属脾气、专属场景、专属坑点吃透这五个你写代码至少少踩80%的基础坑。今天用严谨不枯燥、通俗不敷衍的方式一次性汇总所有核心知识点、常用代码、避坑指南和选型技巧新手老手都适用。1. str 字符串——老实本分的“只读文本打工人”核心定位字符串 str 是Python的文本专属容器用单引号、双引号、三引号包裹是一个有序、不可变的字符序列。重点记住不可变是它的最大人设一旦创建内部字符绝不允许原地修改。核心特性干货牢记有序可索引支持下标取值、切片操作精准截取任意字符彻底不可变任何修改、替换、拼接操作都是生成新字符串原字符串纹丝不动元素单一只能存储Unicode字符数字、符号、汉字都算字符不能存其他数据类型可遍历支持for循环逐个读取字符高频常用操作日常编码够用版s Hello Python! 索引切片左闭右开 print(s[0]) # 取首个字符H print(s[1:5]) # 切片截取ello 常用万能方法 s.upper() # 全部转大写 s.lower() # 全部转小写 s.strip() # 去除首尾空格、换行符、制表符 s.split( ) # 按空格分割返回列表 |.join([1,2,3]) # 列表拼接为字符串 s.find(Python) # 查找字符下标无匹配返回-1 s.replace(Hello,Hi) # 字符替换避坑指南 适用场景❌ 千万别用 循环拼接大量字符串因为不可变特性每次拼接都会新建对象性能爆炸。✅ 海量拼接优先用 join()效率直接拉满。适用场景所有文本处理场景日志解析、文案存储、接口传参、文件名称处理等。2. list 列表——随心所欲的“万能可变收纳盒”核心定位列表 list 是Python最万能、最常用的容器用 [] 定义主打一个有序、可变、包容万物。如果不明确该用什么容器无脑选列表大概率不会错堪称数据容器里的“万金油”。核心特性可变可修改支持原地增、删、改、查无需生成新对象有序可重复元素有固定顺序允许存在多个一模一样的元素包容性极强数字、字符串、元组、字典、甚至嵌套列表通通能存支持索引切片灵活取值适配各种数据读取需求高频常用操作lst [1, 2, 3] lst.append(4) # 尾部追加元素最常用 lst.insert(0, 0) # 指定下标插入元素 lst.pop() # 删除尾部元素返回被删除的值 lst.pop(1) # 删除指定下标元素 lst.remove(2) # 删除第一个匹配的目标元素 lst.sort() # 原地升序排序 lst.reverse() # 原地反转列表 lst.extend([5,6]) # 合并另一个序列批量追加避坑指南 适用场景❌ 列表是可变对象直接赋值属于浅拷贝修改新列表会影响原列表。✅ 需要独立数据时用切片或copy方法拷贝。适用场景有序数据集存储、频繁增删数据、临时存储批量数据、循环遍历取值。3. tuple 元组——顽固守规矩的“只读固定套餐”核心定位元组 tuple 用 () 定义和列表是“亲兄弟”唯一且最大的区别天生不可变。如果说列表是可随意改动的草稿元组就是打印好的正式文件定稿后绝不允许修改。核心特性全员不可变无法增、删、改元素数据安全不被篡改有序可重复保留元素顺序允许重复数据可哈希能当做字典的key、集合的元素列表绝对做不到特殊彩蛋元组嵌套列表时外层元组不可变内部列表依然可以修改t (1, [2, 3]) t[1].append(4) # 合法内部列表可修改 print(t) # (1, [2, 3, 4])高频常用操作因为不可变元组没有任何增删改方法仅支持查询类操作t (1, 2, 2, 3) print(t.count(2)) # 统计元素出现次数 print(t.index(3)) # 查找元素对应下标避坑指南 适用场景❌ 单元素元组必须写 (x,)只写 (x) 会被判定为普通括号不是元组。适用场景固定不变的常量数据、函数多返回值、字典key、防止数据被意外篡改的场景。4. dict 字典——精准高效的“查表映射神器”核心定位字典 dict 用 {key: value} 定义是Python的键值对映射容器。主打一个按key精准查找速度秒杀列表遍历堪称数据查询界的搜索引擎。Python3.7及以上版本字典默认保留插入顺序。核心特性key严格要求必须是可哈希类型str/int/tuple列表、集合、字典不能当keykey唯一不重复重复赋值会直接覆盖旧值value无限制可重复、可存任意类型数据查询效率极高基于哈希表实现无论数据量多大查找速度基本恒定可变容器支持动态增删改键值对高频常用操作d {name: 张三, age: 20} d[name] # 直接取值key不存在直接报错 d.get(gender, 未知) # 安全取值无key返回默认值推荐 d.keys() # 获取所有键 d.values() # 获取所有值 d.items() # 获取所有键值对遍历必备 d.pop(age) # 删除指定键返回对应value d.update({gender: 男}) # 批量更新/新增键值对避坑指南 适用场景❌ 遍历字典时默认遍历的是key不是value。❌ 千万不要用可变类型做字典key直接报错。适用场景一对一映射数据存储、配置参数、用户信息、ID对应关系、需要快速精准查询的场景。5. set 集合——洁癖专治的“去重对比小能手”核心定位集合 set 用 {元素} 或 set() 定义主打自动去重、集合运算是自带洁癖的数据容器。注意空集合只能用 set(){} 是空字典别搞混核心特性元素绝对唯一自动剔除重复数据去重效率天花板无序无下标不支持索引、切片无法单独取某个元素元素可哈希不能存储列表、字典、集合等可变类型数据支持数学集合运算轻松实现交、并、差集对比高频常用操作s1 {1, 2, 3} s2 {3, 4, 5} s1.add(6) # 添加单个元素 s1.remove(2) # 删除元素不存在则报错 s1.discard(99) # 安全删除不存在不报错 核心集合运算 print(s1 | s2) # 并集合并两个集合去重 print(s1 s2) # 交集取出两个集合共有元素 print(s1 - s2) # 差集取出s1独有、s2没有的元素 print(s1 ^ s2) # 对称差集双方各自独有元素避坑指南 适用场景❌ 集合无序不能通过下标取值需要有序数据请转列表。适用场景批量数据去重、两组数据对比、筛选交集/差异数据、成员快速判断。终极对比表一张图吃透所有区别数据类型是否有序是否可变元素可否重复索引访问核心用途str 字符串有序不可变可重复支持文本存储与处理list 列表有序可变可重复支持有序可变数据存储tuple 元组有序不可变可重复支持固定常量、安全数据存储dict 字典插入有序可变key唯一value可重复按键查询键值映射、快速查表set 集合无序可变不可重复不支持数据去重、集合对比极简选型口诀直接照抄够用处理文字、文本内容 → str存有序数据、需要频繁增删改 → list数据固定、禁止被修改 → tuple存对应关系、需要快速查找数据 → dict数据去重、对比两组数据差异 → set高频易错终极避坑总结不可变类型str/tuple所有修改操作都不会改动原对象只会生成新对象可哈希禁忌dict的key、set的元素绝对不能用list/set/dict空容器误区[]空列表、{}空字典、set()空集合切勿混淆字符串拼接禁忌循环拼接不用 优先 join()字典遍历误区默认遍历key需要键值对务必用items()结尾小结这五大数据结构是Python的地基没有花里胡哨的高阶语法却是所有项目、算法、爬虫、数据分析的核心基础。搞懂它们的特性、差异和适用场景写代码不再凭感觉选型精准、报错更少、代码更优雅。