collections.deque 类是 Python 标准库 collections 模块提供的双端队列(double-ended queue)数据结构。deque 类支持一个名为 maxlen 的可选参数,用于创建具有固定最大长度的双端队列。当您在创建 deque 时指定了 maxlen 参数,该队列将自动保持其长度不超过指定的最大值。当试图向已满的有限长度 deque 添加新元素时,最旧的元素(最先加入的元素)将被自动移除,以便为新元素腾出空间。这种行为被称为“先进先出”(FIFO)或“循环缓冲区”。
maxlen 参数的基本用法如下:
deque([iterable], maxlen=n)
参数说明:
- iterable(可选):一个可迭代对象,用于初始化 deque 的内容。如果不提供 iterable,则创建一个空的 deque。
- maxlen=n(可选):一个非负整数,指定 deque 的最大长度。如果省略 maxlen 或将其设置为 None(默认值),创建的 deque 将没有长度限制。
示例:
from collections import deque
# 创建一个固定长度为 3 的 deque
limited_dq = deque(maxlen=3)
# 添加几个元素
limited_dq.append(1)
limited_dq.append(2)
limited_dq.append(3)
# 输出当前 deque:deque([1, 2, 3])
print(limited_dq)
# 继续添加元素,此时队列已满,最旧的元素(1)将被自动移除
limited_dq.append(4)
# 输出更新后的 deque:deque([2, 3, 4])
print(limited_dq)
在这个示例中,我们创建了一个最大长度为 3 的 deque。当我们向该队列添加第四个元素(4)时,由于队列已满,最早添加的元素(1)被自动移除,以保持队列长度不超过 3。因此,添加新元素后的 deque 包含的是最新添加的三个元素(2、3、4)。
注意事项:
- 当 deque 达到其最大长度后继续添加元素时,无论是使用 append() 还是 appendleft(),都会触发自动移除最旧元素的行为。
- 如果您想修改已存在 deque 的最大长度,由于 maxlen 属性在 deque 对象创建后不可更改,您需要创建一个新的 deque 对象,并将原 deque 的内容复制到新对象中,同时设置新的 maxlen 值。这样做可能会涉及到一定的性能开销,特别是当原 deque 很大时。
查询 deque 的当前长度可以使用内置的 len() 函数,但要注意,即使 deque 有最大长度限制,len() 返回的仍然是当前实际存储的元素数量,而非 maxlen 设置的值。 若要获取 deque 的最大长度限制,可以查看其 maxlen 属性:
current_length = len(limited_dq)
max_allowed_length = limited_dq.maxlen
存档地址:https://www.yuque.com/worthstudy/study/dk3gduexg8q723n8?singleDoc# 《maxlen》
© 版权声明
文章版权归作者所有,如需转载请联系作者。若文章内容侵犯了您的权益,请通过网站底部联系方式联系我们处理(本站具有最终解释权)。如有不便之处,敬请谅解。
THE END
暂无评论内容