Python 支持固定大小的后进先出栈吗?
我想要一个数据结构,它的大小是固定的,遵循后进先出(LIFO)的原则。请问有没有现成的?
补充一下:抱歉,我想要的是LIFO,而不是FIFO。
我查看了这个链接,发现它已经提供了LIFO的功能。我想要实现的只是自动删除最旧的那个元素。
举个例子:假设这个LIFO的大小是5,里面的元素是:1 2 3 4 5
当第6个元素进来的时候,1应该被删除,变成:
2 3 4 5 6
这个怎么实现呢?
1 个回答
在Python中,collections.deque 和 queue.Queue 都支持先进先出(FIFO)和最大容量的设置。
以下内容是为了更清楚地解释文档中的内容:
queue.LifoQueue 也支持这个功能,但当达到设定的最大容量时,它不会自动移除最后一个元素:
class queue.LifoQueue(maxsize=0)
这是一个后进先出(LIFO)队列的构造函数。maxsize 是一个整数,用来设置队列中可以放置的最大元素数量。当达到这个数量后,插入新元素会被阻塞,直到队列中的元素被取出。如果 maxsize 小于或等于零,队列的大小就没有限制。
collections.deque 则会在设定了最大长度(maxlen)的情况下,自动移除最后一个元素,这正是提问者所需要的功能:
class collections.deque([iterable[, maxlen]])
如果没有指定 maxlen 或者它是 None,deque 可以无限增长。否则,deque 的长度会被限制在指定的最大长度。一旦这个有限长度的 deque 满了,当添加新元素时,会从另一端丢弃相应数量的元素。有限长度的 deque 提供了类似于 Unix 中尾部过滤器的功能。它们也很适合用来跟踪交易和其他数据池,其中只有最近的活动是重要的。