点击头像,进入个人中心,查看文章合集,还有更多Python相关的精彩教程等着你!
1.1 引言
Python 的基础数据类型(int、float、str、list、dict、tuple、set)我们都很熟悉了。
在进阶学习中,我们需要更高效、更灵活的数据结构来解决实际问题,比如:
- 需要 队列(先进先出)时,list 并不是最优解。
- 需要 统计元素频率 时,手写循环太繁琐。
- 需要 有序字典 时,内置 dict 在 Python 3.7+ 虽然保持插入顺序,但有更专业的实现。
Python 的 collections 模块提供了许多强大的数据结构,能让我们的代码更简洁高效。
1.2 collections 模块常用数据结构
1.2.1 deque —— 高效双端队列
适合实现队列和栈。
相比 list,deque 在头尾的插入/删除操作时间复杂度是 O(1),而 list 可能是 O(n)。
示例:
from collections import deque
# 初始化队列
queue = deque(["A", "B", "C"])
# 右边入队
queue.append("D")
print("入队D:", queue)
# 左边入队
queue.appendleft("Z")
print("左侧入队Z:", queue)
# 右边出队
right_out = queue.pop()
print("右侧出队:", right_out, queue)
# 左边出队
left_out = queue.popleft()
print("左侧出队:", left_out, queue)
输出结果:
入队D: deque(['A', 'B', 'C', 'D'])
左侧入队Z: deque(['Z', 'A', 'B', 'C', 'D'])
右侧出队: D deque(['Z', 'A', 'B', 'C'])
左侧出队: Z deque(['A', 'B', 'C'])
1.2.2 Counter —— 计数器
用于统计可迭代对象中元素出现的次数。
示例:
from collections import Counter
words = ["apple", "banana", "apple", "orange", "banana", "apple"]
counter = Counter(words)
print("统计结果:", counter)
print("apple 出现次数:", counter["apple"])
print("出现最多的两个:", counter.most_common(2))
输出结果:
统计结果: Counter({'apple': 3, 'banana': 2, 'orange': 1})
apple 出现次数: 3
出现最多的两个: [('apple', 3), ('banana', 2)]
1.2.3 defaultdict —— 带默认值的字典
避免 KeyError,可以为不存在的键提供默认值。
示例:
from collections import defaultdict
# 默认值为0
d = defaultdict(int)
d["a"] += 1
d["b"] += 2
print("字典内容:", dict(d))
print("访问未定义key:", d["c"]) # 自动生成默认值 0
输出结果:
字典内容: {'a': 1, 'b': 2}
访问未定义key: 0
1.2.4 OrderedDict —— 有序字典
在 Python 3.7+ 普通字典也保持插入顺序,但 OrderedDict 还提供了 移动元素位置 的方法。
示例:
from collections import OrderedDict
od = OrderedDict()
od["a"] = 1
od["b"] = 2
od["c"] = 3
print("初始字典:", od)
# 移动元素到末尾
od.move_to_end("a")
print("a 移到末尾:", od)
# 移动元素到开头
od.move_to_end("c", last=False)
print("c 移到开头:", od)
输出结果:
初始字典: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
a 移到末尾: OrderedDict([('b', 2), ('c', 3), ('a', 1)])
c 移到开头: OrderedDict([('c', 3), ('b', 2), ('a', 1)])
1.3 图解:常用数据结构
下面是一个示意图,展示了这些数据结构的特点:
1.4 小结
- deque → 高效双端队列,适合队列和栈
- Counter → 统计频率最方便
- defaultdict → 避免 KeyError,自动生成默认值
- OrderedDict → 有序字典,可手动调整顺序
这些工具能让你的代码更简洁,处理数据更高效。