Python 数据结构知识汇总Python 提供了丰富且强大的内置数据结构熟练掌握它们是编写高效 Python 代码的基础。本文将对str、list、tuple、dict、set五种核心数据结构进行系统性总结。一、字符串str字符串是 Python 中表示文本数据的不可变序列类型。1. 创建s1 hello s2 world s3 多行 字符串 s4 hello * 3 # hello hello hello. 特性不可变创建后不能修改任何修改操作都会返回新字符串可索引支持下标访问s[0]获取第一个字符可切片s[start:stop:step]可迭代支持for c in s遍历3. 常用方法方法说明s.upper() / lower()大小写转换s.strip()去除首尾空白s.split(sep)按分隔符拆分 → 列表 .join(list)列表拼接为字符串s.find(sub)查找子串返回索引-1 表示未找到s.replace(old, new)替换子串s.startswith(prefix)判断前缀len(s)获取长度4. 格式化name, age Alice, 25 # f-string推荐 print(fName: {name}, Age: {age}) # format() print(Name: {}, Age: {}.format(name, age)) # % 格式化旧式 print(Name: %s, Age: %d % (name, age))二、列表list列表是可变的有序序列可存储任意类型的元素。1. 创建lst1 [1, 2, 3] lst2 list(range(5)) # [0, 1, 2, 3, 4] lst3 [0] * 5 # [0, 0, 0, 0, 0] lst4 [x**2 for x in range(5)] # 列表推导式 [0,1,4,9,16]2. 常用操作操作说明lst.append(x)末尾追加lst.extend(iterable)扩展列表lst.insert(i, x)在指定位置插入lst.pop(i)移除并返回指定位置元素默认末尾lst.remove(x)移除第一个匹配元素lst.sort()原地排序lst.reverse()原地反转lst.index(x)查找元素索引lst.count(x)统计元素出现次数del lst[i]删除指定索引元素3. 切片Pythonlst [0, 1, 2, 3, 4, 5] lst[1:4] # [1, 2, 3] lst[:3] # [0, 1, 2] lst[::2] # [0, 2, 4] lst[::-1] # 反转 [5, 4, 3, 2, 1, 0]4. 列表推导式Python# 基本形式 squares [x**2 for x in range(10)] # 带条件 evens [x for x in range(10) if x % 2 0] # 嵌套循环 pairs [(x, y) for x in [1,2] for y in [3,4]]三、元组tuple元组是不可变的有序序列功能与列表类似但不能修改。1. 创建Pythont1 (1, 2, 3) t2 1, 2, 3 # 省略括号 t3 (1,) # 单元素元组逗号不能省略 t4 tuple([1, 2, 3]) # 从列表转换2. 特性不可变不能增删改元素可哈希元素均为不可变类型时可作为字典的键解包a, b, c (1, 2, 3)性能比列表更轻量访问速度略快3. 常用方法Pythont (1, 2, 3, 2, 4) t.count(2) # 2 t.index(2) # 1第一个匹配的索引 len(t) # 54. 元组与列表的选择场景选择需要修改数据列表数据不应更改元组作为字典键元组函数返回多个值元组四、字典dict字典是键值对key-value的无序集合Python 3.7 保持插入顺序。1. 创建Pythond1 {name: Alice, age: 25} d2 dict(nameBob, age30) d3 dict(zip([a,b], [1,2])) # {a: 1, b: 2} d4 {x: x**2 for x in range(5)} # 字典推导式2. 常用操作操作说明d[key]获取值key 不存在则报 KeyErrord.get(key, default)安全获取不存在返回默认值d[key] value设置值d.update(d2)合并字典d.pop(key)删除并返回值del d[key]删除键值对d.keys()获取所有键视图d.values()获取所有值视图d.items()获取所有键值对视图key in d判断键是否存在3. 遍历Pythond {a: 1, b: 2, c: 3} # 遍历键 for k in d: print(k) # 遍历键值对 for k, v in d.items(): print(k, v)4. 默认值Pythonfrom collections import defaultdict # 值为列表 dd defaultdict(list) dd[a].append(1) # 不需要先初始化 # 值为整数 dd defaultdict(int) dd[a] 1 # 自动初始化为 0五、集合set集合是无序的、不重复的元素集合。1. 创建Pythons1 {1, 2, 3} s2 set([1, 2, 2, 3]) # {1, 2, 3} 自动去重 s3 set() # 空集合不能用 {}那是空字典2. 常用操作操作说明s.add(x)添加元素s.remove(x)移除元素不存在报 KeyErrors.discard(x)移除元素不存在不报错s.pop()随机移除并返回一个元素s.clear()清空集合len(s)元素个数x in s成员判断O(1) 复杂度3. 集合运算Pythona {1, 2, 3, 4} b {3, 4, 5, 6} a | b # 并集 {1,2,3,4,5,6} a b # 交集 {3,4} a - b # 差集 {1,2} a ^ b # 对称差集 {1,2,5,6} a.issubset(b) # 是否为子集 a.issuperset(b) # 是否为超集 a.isdisjoint(b) # 是否无交集4. 集合推导式Pythons {x**2 for x in range(10) if x % 2 0} # {0, 4, 16, 36, 64}六、对比总结特性strlisttupledictset可变性❌✅❌✅✅有序性✅✅✅✅(3.7)❌可重复✅✅✅键唯一值可重复❌可哈希✅❌✅(元素可哈希时)❌❌存储方式字符序列任意对象任意对象键值对单一元素访问方式索引/切片索引/切片索引/切片键不支持索引查找复杂度O(n)O(n)O(n)O(1)O(1)七、实用技巧1. 列表去重保持顺序Pythonlst [3, 1, 2, 1, 3, 2] # Python 3.7 字典保持插入顺序 unique list(dict.fromkeys(lst)) # [3, 1, 2]2. 统计频率Pythonfrom collections import Counter data [1, 2, 2, 3, 3, 3, 4] count Counter(data) # Counter({3: 3, 2: 2, 1: 1, 4: 1}) count.most_common(2) # [(3, 3), (2, 2)]3. 合并字典Python 3.9Pythond1 {a: 1, b: 2} d2 {c: 3, d: 4} merged d1 | d2 # {a: 1, b: 2, c: 3, d: 4}4. 使用enumerate获取索引Pythonlst [a, b, c] for i, v in enumerate(lst, start1): print(i, v) # 1 a / 2 b / 3 c5. 使用zip并行遍历Pythonnames [Alice, Bob, Charlie] scores [85, 92, 78] for name, score in zip(names, scores): print(f{name}: {score})总结Python 的五大内置数据结构各有特色str不可变文本序列适合文本处理list全能可变序列日常开发使用频率最高tuple不可变轻量序列适合存储固定数据dict键值对映射快速查找的不二之选set无序唯一集合去重和集合运算的最佳工具
python【str、list、tuple、dict、set】 五大核心类型
Python 数据结构知识汇总Python 提供了丰富且强大的内置数据结构熟练掌握它们是编写高效 Python 代码的基础。本文将对str、list、tuple、dict、set五种核心数据结构进行系统性总结。一、字符串str字符串是 Python 中表示文本数据的不可变序列类型。1. 创建s1 hello s2 world s3 多行 字符串 s4 hello * 3 # hello hello hello. 特性不可变创建后不能修改任何修改操作都会返回新字符串可索引支持下标访问s[0]获取第一个字符可切片s[start:stop:step]可迭代支持for c in s遍历3. 常用方法方法说明s.upper() / lower()大小写转换s.strip()去除首尾空白s.split(sep)按分隔符拆分 → 列表 .join(list)列表拼接为字符串s.find(sub)查找子串返回索引-1 表示未找到s.replace(old, new)替换子串s.startswith(prefix)判断前缀len(s)获取长度4. 格式化name, age Alice, 25 # f-string推荐 print(fName: {name}, Age: {age}) # format() print(Name: {}, Age: {}.format(name, age)) # % 格式化旧式 print(Name: %s, Age: %d % (name, age))二、列表list列表是可变的有序序列可存储任意类型的元素。1. 创建lst1 [1, 2, 3] lst2 list(range(5)) # [0, 1, 2, 3, 4] lst3 [0] * 5 # [0, 0, 0, 0, 0] lst4 [x**2 for x in range(5)] # 列表推导式 [0,1,4,9,16]2. 常用操作操作说明lst.append(x)末尾追加lst.extend(iterable)扩展列表lst.insert(i, x)在指定位置插入lst.pop(i)移除并返回指定位置元素默认末尾lst.remove(x)移除第一个匹配元素lst.sort()原地排序lst.reverse()原地反转lst.index(x)查找元素索引lst.count(x)统计元素出现次数del lst[i]删除指定索引元素3. 切片Pythonlst [0, 1, 2, 3, 4, 5] lst[1:4] # [1, 2, 3] lst[:3] # [0, 1, 2] lst[::2] # [0, 2, 4] lst[::-1] # 反转 [5, 4, 3, 2, 1, 0]4. 列表推导式Python# 基本形式 squares [x**2 for x in range(10)] # 带条件 evens [x for x in range(10) if x % 2 0] # 嵌套循环 pairs [(x, y) for x in [1,2] for y in [3,4]]三、元组tuple元组是不可变的有序序列功能与列表类似但不能修改。1. 创建Pythont1 (1, 2, 3) t2 1, 2, 3 # 省略括号 t3 (1,) # 单元素元组逗号不能省略 t4 tuple([1, 2, 3]) # 从列表转换2. 特性不可变不能增删改元素可哈希元素均为不可变类型时可作为字典的键解包a, b, c (1, 2, 3)性能比列表更轻量访问速度略快3. 常用方法Pythont (1, 2, 3, 2, 4) t.count(2) # 2 t.index(2) # 1第一个匹配的索引 len(t) # 54. 元组与列表的选择场景选择需要修改数据列表数据不应更改元组作为字典键元组函数返回多个值元组四、字典dict字典是键值对key-value的无序集合Python 3.7 保持插入顺序。1. 创建Pythond1 {name: Alice, age: 25} d2 dict(nameBob, age30) d3 dict(zip([a,b], [1,2])) # {a: 1, b: 2} d4 {x: x**2 for x in range(5)} # 字典推导式2. 常用操作操作说明d[key]获取值key 不存在则报 KeyErrord.get(key, default)安全获取不存在返回默认值d[key] value设置值d.update(d2)合并字典d.pop(key)删除并返回值del d[key]删除键值对d.keys()获取所有键视图d.values()获取所有值视图d.items()获取所有键值对视图key in d判断键是否存在3. 遍历Pythond {a: 1, b: 2, c: 3} # 遍历键 for k in d: print(k) # 遍历键值对 for k, v in d.items(): print(k, v)4. 默认值Pythonfrom collections import defaultdict # 值为列表 dd defaultdict(list) dd[a].append(1) # 不需要先初始化 # 值为整数 dd defaultdict(int) dd[a] 1 # 自动初始化为 0五、集合set集合是无序的、不重复的元素集合。1. 创建Pythons1 {1, 2, 3} s2 set([1, 2, 2, 3]) # {1, 2, 3} 自动去重 s3 set() # 空集合不能用 {}那是空字典2. 常用操作操作说明s.add(x)添加元素s.remove(x)移除元素不存在报 KeyErrors.discard(x)移除元素不存在不报错s.pop()随机移除并返回一个元素s.clear()清空集合len(s)元素个数x in s成员判断O(1) 复杂度3. 集合运算Pythona {1, 2, 3, 4} b {3, 4, 5, 6} a | b # 并集 {1,2,3,4,5,6} a b # 交集 {3,4} a - b # 差集 {1,2} a ^ b # 对称差集 {1,2,5,6} a.issubset(b) # 是否为子集 a.issuperset(b) # 是否为超集 a.isdisjoint(b) # 是否无交集4. 集合推导式Pythons {x**2 for x in range(10) if x % 2 0} # {0, 4, 16, 36, 64}六、对比总结特性strlisttupledictset可变性❌✅❌✅✅有序性✅✅✅✅(3.7)❌可重复✅✅✅键唯一值可重复❌可哈希✅❌✅(元素可哈希时)❌❌存储方式字符序列任意对象任意对象键值对单一元素访问方式索引/切片索引/切片索引/切片键不支持索引查找复杂度O(n)O(n)O(n)O(1)O(1)七、实用技巧1. 列表去重保持顺序Pythonlst [3, 1, 2, 1, 3, 2] # Python 3.7 字典保持插入顺序 unique list(dict.fromkeys(lst)) # [3, 1, 2]2. 统计频率Pythonfrom collections import Counter data [1, 2, 2, 3, 3, 3, 4] count Counter(data) # Counter({3: 3, 2: 2, 1: 1, 4: 1}) count.most_common(2) # [(3, 3), (2, 2)]3. 合并字典Python 3.9Pythond1 {a: 1, b: 2} d2 {c: 3, d: 4} merged d1 | d2 # {a: 1, b: 2, c: 3, d: 4}4. 使用enumerate获取索引Pythonlst [a, b, c] for i, v in enumerate(lst, start1): print(i, v) # 1 a / 2 b / 3 c5. 使用zip并行遍历Pythonnames [Alice, Bob, Charlie] scores [85, 92, 78] for name, score in zip(names, scores): print(f{name}: {score})总结Python 的五大内置数据结构各有特色str不可变文本序列适合文本处理list全能可变序列日常开发使用频率最高tuple不可变轻量序列适合存储固定数据dict键值对映射快速查找的不二之选set无序唯一集合去重和集合运算的最佳工具