公司动态

Python 数据结构知识汇总

📅 2026/7/22 2:40:53
Python 数据结构知识汇总
Python 数据结构知识汇总 前言Python 作为一门优雅且功能强大的编程语言其内置的数据结构是每个 Python 开发者必须掌握的基础知识。本文将系统性地介绍 Python 中五大核心数据结构字符串str、列表list、元组tuple、字典dict和集合set帮助读者建立完整的知识体系。一、字符串str1.1 什么是字符串字符串是 Python 中最常用的数据类型用于表示文本信息。可以使用单引号、双引号或三引号来定义。python# 字符串定义 str1 Hello World str2 Python str3 多行 字符串1.2 字符串的常用操作操作方法示例长度len()len(hello)→ 5索引[索引]hello[1]→ e切片[开始:结束:步长]hello[1:4]→ ell拼接Hello World→ HelloWorld重复*Hi * 3→ HiHiHi查找find()hello.find(e)→ 1替换replace()hello.replace(e, a)→ hallo分割split()a,b,c.split(,)→ [a,b,c]大写upper()hello.upper()→ HELLO小写lower()HELLO.lower()→ hello去除空格strip() hi .strip()→ hi判断字母数字isalnum()abc123.isalnum()→ True1.3 字符串的切片操作重点pythons Python学习 # 切片语法s[开始:结束:步长] print(s[0]) # P print(s[-1]) # 习 print(s[0:6]) # Python print(s[6:]) # 学习 print(s[::-1]) # 习学nohtyP反转字符串1.4 字符串格式化python# 三种常用格式化方式 # 1. % 格式化旧式 name 张三 age 18 print(姓名%s年龄%d % (name, age)) # 2. format() 方法 print(姓名{}年龄{}.format(name, age)) # 3. f-stringPython 3.6推荐 print(f姓名{name}年龄{age})二、列表list2.1 什么是列表列表是 Python 中最常用的可变容器类型可以存储任意类型的元素支持增删改查操作。python# 列表定义 list1 [] # 空列表 list2 [1, 2, 3] # 整数列表 list3 [a, b, c] # 字符串列表 list4 [1, hello, 3.14, True] # 混合类型2.2 列表的增删改查增加元素方法说明示例append()在末尾添加一个元素lst.append(4)insert()在指定位置插入lst.insert(0, 0)extend()合并另一个列表lst.extend([5,6])pythonlst [1, 2, 3] lst.append(4) # [1, 2, 3, 4] lst.insert(0, 0) # [0, 1, 2, 3, 4] lst.extend([5, 6]) # [0, 1, 2, 3, 4, 5, 6]删除元素方法说明示例pop()删除末尾元素可指定索引lst.pop()→ 返回删除的值remove()删除指定值的第一个匹配项lst.remove(2)del删除指定索引或切片del lst[0]或del lst[1:3]clear()清空列表lst.clear()pythonlst [1, 2, 3, 4, 5] lst.pop() # [1, 2, 3, 4] lst.pop(0) # [2, 3, 4] lst.remove(3) # [2, 4] del lst[0] # [4]修改元素pythonlst [1, 2, 3] lst[0] 100 # [100, 2, 3] lst[1:3] [200, 300] # [100, 200, 300]查询元素pythonlst [10, 20, 30, 20, 40] # 获取元素 print(lst[0]) # 10 print(lst[-1]) # 40 print(lst[1:4]) # [20, 30, 20] # 查找索引 print(lst.index(20)) # 1返回第一个匹配的索引 # 统计次数 print(lst.count(20)) # 2 # 判断是否存在 print(30 in lst) # True # 遍历 for item in lst: print(item) for i, item in enumerate(lst): print(f索引{i}: {item})2.3 列表推导式重点python# 生成 1-10 的平方列表 squares [i**2 for i in range(1, 11)] print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] # 带条件的列表推导式 even [i for i in range(1, 21) if i % 2 0] print(even) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] # 嵌套列表推导式 matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flatten [num for row in matrix for num in row] print(flatten) # [1, 2, 3, 4, 5, 6, 7, 8, 9]2.4 列表的常用函数函数说明示例len()获取长度len([1,2,3])→ 3max()获取最大值max([1,5,3])→ 5min()获取最小值min([1,5,3])→ 1sum()求和sum([1,2,3])→ 6sorted()排序返回新列表sorted([3,1,2])→ [1,2,3]reverse()反转列表lst.reverse()三、元组tuple3.1 什么是元组元组与列表类似但一旦创建不可修改不可变。使用小括号()定义。python# 元组定义 t1 () # 空元组 t2 (1, 2, 3) # 普通元组 t3 (1,) # 单元素元组注意逗号 t4 1, 2, 3 # 不加括号也可以3.2 元组的特点pythont (10, 20, 30, 40, 50) # ✅ 支持索引 print(t[0]) # 10 print(t[-1]) # 50 # ✅ 支持切片 print(t[1:4]) # (20, 30, 40) # ✅ 支持遍历 for item in t: print(item) # ✅ 支持成员判断 print(30 in t) # True # ❌ 不支持修改 t[0] 100 # TypeError: tuple object does not support item assignment3.3 元组的应用场景python# 1. 函数返回多个值 def get_student(): return 张三, 18, 男 name, age, sex get_student() print(name, age, sex) # 张三 18 男 # 2. 交换变量 a, b 10, 20 a, b b, a # 本质是元组解包 print(a, b) # 20 10 # 3. 作为字典的键列表不行 d {(1, 2): value} # ✅ 元组可以作为键 # d {[1, 2]: value} # ❌ 列表不可以作为键四、字典dict4.1 什么是字典字典是 Python 中唯一的键值对key-value映射类型通过键来访问值。键必须是不可变类型字符串、数字、元组值可以是任意类型。python# 字典定义 d1 {} # 空字典 d2 {name: 张三, age: 18} # 普通字典 d3 dict(name张三, age18) # 使用 dict() 函数4.2 字典的增删改查增加/修改pythond {name: 张三, age: 18} # 增加或修改 d[gender] 男 # 新增键值对 d[age] 19 # 修改已有键的值 # update() 合并字典 d.update({score: 90, grade: A}) print(d) # {name: 张三, age: 19, gender: 男, score: 90, grade: A}删除pythond {name: 张三, age: 18, gender: 男} # pop() 删除指定键并返回值 age d.pop(age) print(age) # 18 # popitem() 删除并返回最后一个键值对 item d.popitem() print(item) # (gender, 男) # del 删除指定键 del d[name] # clear() 清空 d.clear()查询pythond {name: 张三, age: 18, gender: 男} # 通过键取值键不存在会报错 print(d[name]) # 张三 # get() 取值键不存在返回 None 或默认值 print(d.get(name)) # 张三 print(d.get(score)) # None print(d.get(score, 0)) # 0 # 获取所有键 print(d.keys()) # dict_keys([name, age, gender]) # 获取所有值 print(d.values()) # dict_values([张三, 18, 男]) # 获取所有键值对 print(d.items()) # dict_items([(name, 张三), (age, 18), (gender, 男)]) # 遍历字典 for key in d: print(f{key}: {d[key]}) for key, value in d.items(): print(f{key}: {value})4.3 字典推导式python# 生成数字平方的字典 squares {i: i**2 for i in range(1, 6)} print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} # 筛选条件 even_squares {i: i**2 for i in range(1, 11) if i % 2 0} print(even_squares) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}4.4 字典的常用方法方法说明get(key, default)获取键的值不存在返回默认值setdefault(key, default)如果键存在返回其值否则插入键并设置默认值pop(key)删除键并返回其值keys()返回所有键的视图values()返回所有值的视图items()返回所有键值对的视图update(dict2)合并另一个字典五、集合set5.1 什么是集合集合是无序的、元素唯一的容器类型主要用于去重和集合运算交集、并集等。python# 集合定义 s1 set() # 空集合不能使用 {}那是空字典 s2 {1, 2, 3} # 普通集合 s3 set([1, 2, 2, 3, 3]) # [1, 2, 3]自动去重5.2 集合的操作添加元素pythons {1, 2, 3} # add() 添加单个元素 s.add(4) # {1, 2, 3, 4} s.add(2) # {1, 2, 3, 4}不会重复 # update() 添加多个元素 s.update([5, 6, 7]) # {1, 2, 3, 4, 5, 6, 7}删除元素pythons {1, 2, 3, 4, 5} # remove() 删除指定元素不存在报错 s.remove(3) # {1, 2, 4, 5} # discard() 删除指定元素不存在不报错 s.discard(10) # 不会报错 # pop() 随机删除并返回一个元素 item s.pop() # clear() 清空 s.clear()5.3 集合运算pythonA {1, 2, 3, 4, 5} B {4, 5, 6, 7, 8} # 交集 print(A B) # {4, 5} print(A.intersection(B)) # 并集 print(A | B) # {1, 2, 3, 4, 5, 6, 7, 8} print(A.union(B)) # 差集A 有 B 没有 print(A - B) # {1, 2, 3} print(A.difference(B)) # 对称差集不同时存在的 print(A ^ B) # {1, 2, 3, 6, 7, 8} print(A.symmetric_difference(B)) # 判断子集 print({1, 2} A) # True{1,2} 是 A 的子集 # 判断超集 print(A {1, 2}) # TrueA 是 {1,2} 的超集5.4 集合的去重应用python# 去重 lst [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] unique list(set(lst)) print(unique) # [1, 2, 3, 4] # 统计字符串中的不同字符 text hello world chars set(text) print(chars) # {h, e, l, o, , w, r, d}六、数据结构对比总结6.1 快速对比表特性列表 (list)元组 (tuple)字典 (dict)集合 (set)符号[](){}{}可变性✅ 可变❌ 不可变✅ 可变✅ 可变有序性✅ 有序✅ 有序✅ 有序Python 3.7❌ 无序元素唯一性❌ 可重复❌ 可重复✅ 键唯一✅ 元素唯一索引方式整数索引整数索引键key不支持索引适用场景存储有序数据存储不可变数据键值映射去重、集合运算6.2 使用场景速查python# 列表需要频繁修改的有序数据 students [张三, 李四, 王五] # 元组不需要修改的数据或函数返回多个值 coordinates (10, 20) # 字典需要键值映射的数据 user {name: 张三, age: 18} # 集合去重或集合运算 unique_numbers {1, 2, 3, 4, 5}七、常见面试题7.1 列表和元组的区别区别列表元组可变性可变不可变性能较慢需要额外分配内存较快固定大小使用场景需要修改的数据不需要修改的数据7.2 字典和集合的区别区别字典集合元素类型键值对单个元素键唯一性键唯一元素唯一使用场景映射关系去重、集合运算7.3 可变对象 vs 不可变对象python# 不可变对象修改会创建新对象 s hello s s world # 创建了新字符串 # 可变对象修改不会创建新对象 lst [1, 2, 3] lst.append(4) # 在原列表上修改八、总结本文系统介绍了 Python 中五大核心数据结构字符串str文本处理不可变列表list有序可变容器最常用的序列类型元组tuple有序不可变容器安全性高字典dict键值映射高效查找集合set无序不重复元素去重与集合运算掌握这些数据结构是学好 Python 的基础建议在实际编码中多加练习理解每种数据结构的特性和适用场景。本文首发于 CSDN欢迎点赞、收藏、转发 如有问题欢迎在评论区留言交流。