以下是 Python 常用数据结构总结,涵盖基础类型、高级容器及适用场景,帮助快速掌握核心用法与特性对比:
一、基础数据结构
1. 列表(List)
- 特点:有序、可变、允许重复元素。
- 常用操作:
nums = [1, 2, 3] nums.append(4) # 末尾添加 → [1, 2, 3, 4] nums.insert(0, 0) # 插入 → [0, 1, 2, 3, 4] nums.pop() # 移除末尾 → 4 nums[1:3] = [10, 20] # 切片修改 → [0, 10, 20, 3]
- 适用场景:动态数据集合,频繁增删或修改元素。
2. 元组(Tuple)
- 特点:有序、不可变、允许重复元素。
- 常用操作:
point = (3, 4) x, y = point # 解包 → x=3, y=4
- 适用场景:存储不可变数据(如配置项)、函数多返回值。
3. 字典(Dict)
- 特点:键值对、无序(Python 3.7+ 保持插入顺序)、键唯一。
- 常用操作:
user = {"name": "Alice", "age": 30} user["email"] = "alice@example.com" # 添加键值对 age = user.get("age", 0) # 安全获取值 for key, value in user.items(): # 遍历键值对 print(key, value)
- 适用场景:快速查找、关联数据存储(如JSON数据)。
4. 集合(Set)
- 特点:无序、元素唯一、支持集合运算。
- 常用操作:
a = {1, 2, 3} b = {3, 4, 5} a | b # 并集 → {1, 2, 3, 4, 5} a & b # 交集 → {3}
- 适用场景:去重、成员检测、数学集合操作。
二、高级数据结构
1. 双端队列(deque)
- 模块:
collections.deque
- 特点:线程安全、高效头尾插入/删除(O(1) 时间复杂度)。
- 示例:
from collections import deque dq = deque([1, 2, 3]) dq.appendleft(0) # 左端添加 → deque([0, 1, 2, 3]) dq.pop() # 右端移除 → 3
- 适用场景:队列/栈实现、滑动窗口算法。
2. 堆(Heap)
- 模块:
heapq
- 特点:实现最小堆,堆顶元素始终最小。
- 示例:
import heapq heap = [] heapq.heappush(heap, 3) # 添加元素 → [3] heapq.heappop(heap) # 弹出最小 → 3
- 适用场景:优先队列、Top K 问题。
3. 命名元组(namedtuple)
- 模块:
collections.namedtuple
- 特点:具名字段的元组,增强可读性。
- 示例:
from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) p = Point(3, 4) print(p.x, p.y) # 3 4
- 适用场景:替代简单类,数据记录(如CSV行)。
4. 计数器(Counter)
- 模块:
collections.Counter
- 特点:统计元素出现次数。
- 示例:
from collections import Counter words = ["apple", "banana", "apple"] counter = Counter(words) # {"apple": 2, "banana": 1}
- 适用场景:频率统计、词频分析。
三、数据结构对比
结构 | 有序性 | 可变性 | 元素唯一性 | 查找效率 | 典型用途 |
---|---|---|---|---|---|
列表(list) | 是 | 可变 | 允许重复 | O(n) | 动态集合、序列操作 |
元组(tuple) | 是 | 不可变 | 允许重复 | O(n) | 不可变数据存储 |
字典(dict) | 无(Python <3.7) 有(Python 3.7+) |
可变 | 键唯一 | O(1) | 键值映射、快速查找 |
集合(set) | 无 | 可变 | 元素唯一 | O(1) | 去重、集合运算 |
四、选择原则
- 需要快速查找 → 字典、集合。
- 保持插入顺序 → 列表(Python 3.7+ 的字典也保持顺序)。
- 不可变数据 → 元组。
- 高效头尾操作 →
deque
。 - 元素频率统计 →
Counter
。
五、实用技巧
- 列表推导式:快速生成列表。
squares = [x**2 for x in range(10)]
- 字典推导式:快速构建字典。
word_lengths = {word: len(word) for word in ["apple", "banana"]}
- 合并字典(Python 3.9+):
dict1 = {"a": 1} dict2 = {"b": 2} merged = dict1 | dict2 # {"a": 1, "b": 2}
掌握这些数据结构及其适用场景,能显著提升代码效率与可读性。根据需求选择最合适的结构,是Python编程的核心技能之一!