deque 滑动窗口:自动丢弃最旧的观测值
只保留最近几次观测时,列表头部删除会移动后续元素。deque 适合两端操作,maxlen 可以表达固定容量窗口。
问题从哪里出现
只保留最近几次观测时,列表头部删除会移动后续元素。deque 适合两端操作,maxlen 可以表达固定容量窗口。
理解核心机制
有界 deque 满后再 append 会从另一端移除元素。它提供的是按条数计的窗口,不是按时间计的窗口;若需要时间范围,必须检查时间戳。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。
from collections import deque
window = deque(maxlen=3)
for value in (10, 20, 30, 40):
window.append(value)
assert list(window) == [20, 30, 40]
print(sum(window) / len(window))适用边界与常见误区
自动丢弃适合最近记录,但不适合必须处理每一项的任务队列。多步检查再修改也不能仅凭单次操作的实现特性就当作完整并发协议。
继续练习
给观测附上不均匀时间戳,比较最近三条与最近一分钟的结果,并为时间窗口实现显式过期。