Python 中 deque 的常见用法详解
·
在 Python 编程中,列表(list)是我们最常用的数据结构之一。但在某些场景下,比如需要频繁地从列表两端添加或删除元素时,列表的性能可能不够理想。此时,collections 模块中的 deque(双端队列)就是一个更优的选择。
本文将带你全面了解 deque 的常见用法,并通过示例代码帮助你快速上手。
一、什么是 deque?
deque 是 “double-ended queue” 的缩写,意为双端队列。它支持从队列的两端高效地添加或删除元素,时间复杂度为 O(1),而列表在头部插入/删除元素的时间复杂度为 O(n)。
from collections import deque
二、创建 deque
你可以通过传入一个可迭代对象来创建 deque:
d = deque([1, 2, 3])
print(d) # 输出: deque([1, 2, 3])
你还可以设置最大长度(maxlen),当元素超过这个长度时,最早添加的元素会被自动移除:
d = deque([1, 2, 3], maxlen=3)
d.append(4)
print(d) # 输出: deque([2, 3, 4])
三、添加元素
| 方法 | 说明 |
|---|---|
append(x) |
在右侧添加元素 |
appendleft(x) |
在左侧添加元素 |
extend(iterable) |
在右侧批量添加 |
extendleft(iterable) |
在左侧批量添加(顺序会反转) |
d = deque([1, 2])
d.append(3)
d.appendleft(0)
print(d) # 输出: deque([0, 1, 2, 3])
四、删除元素
| 方法 | 说明 |
|---|---|
pop() |
移除并返回右侧元素 |
popleft() |
移除并返回左侧元素 |
remove(x) |
移除第一个匹配的元素 |
d = deque([1, 2, 3])
print(d.pop()) # 输出: 3
print(d.popleft()) # 输出: 1
print(d) # 输出: deque([2])
五、其他常用操作
| 方法 | 说明 |
|---|---|
clear() |
清空队列 |
count(x) |
统计元素 x 出现的次数 |
rotate(n) |
向右循环移动 n 步(负数表示向左) |
reverse() |
原地反转(Python 3.8+) |
copy() |
创建浅拷贝 |
d = deque([1, 2, 3])
d.rotate(1)
print(d) # 输出: deque([3, 1, 2])
六、实际应用场景
1. 实现队列(FIFO)
q = deque()
q.append('task1')
q.append('task2')
print(q.popleft()) # 输出: task1
2. 实现栈(LIFO)
stack = deque()
stack.append('A')
stack.append('B')
print(stack.pop()) # 输出: B
3. 滑动窗口(如滑动平均)
window = deque(maxlen=3)
for i in range(5):
window.append(i)
print(list(window), sum(window) / len(window))
七、总结
| 特点 | 描述 |
|---|---|
| 高效 | 两端操作时间复杂度为 O(1) |
| 灵活 | 支持队列、栈、滑动窗口等多种结构 |
| 易用 | API 简洁,功能强大 |
如果你在做算法题、写爬虫、做任务调度或实现缓存机制,deque 都是一个非常值得掌握的工具。
更多推荐


所有评论(0)