Python deque maxlen 参数:创建固定长度的双端队列

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
喜欢就点赞支持一下吧,如果觉得不错或日后有所需要,可以收藏文章和关注作者哦。
点赞0打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容