python - Deque 在 Python 中是如何工作的

标签 python queue

在尝试用 Python 重新创建队列和堆栈时,我无法理解 deque 在下面代码片段中的工作原理。

堆栈示例 - 理解

stack = ["a", "b", "c"]

# push operation
stack.append("e")
print(stack)

# pop operation
stack.pop()
print(stack)

正如预期的那样,在推送和弹出时,“e”进入后进先出 (LIFO)。我的问题是下面的例子。

队列示例 - 不理解

from collections import deque

dq = deque(['a','b','c'])
print(dq)

# push
dq.append('e')
print(dq)

# pop
dq.pop()
print(dq)

当推送和弹出时,“e”进入后进先出 (LIFO)。不应该是先进先出 (FIFO) 吗?

最佳答案

A deque is a generalization of stack and a queue (It is short for "double-ended queue") .

因此,pop() 操作仍然使它像一个堆栈一样工作,就像它作为一个列表一样。要使其像队列一样工作,请使用 popleft() 命令。双端队列支持这两种行为,这样 pop() 函数在数据结构中是一致的。为了使双端队列像队列一样工作,您必须使用与队列相对应的函数。因此,在第二个示例中将 pop() 替换为 popleft(),您应该会看到预期的 FIFO 行为。

双端队列还支持最大长度,这意味着当您向双端队列添加大于最大长度的对象时,它会从另一端“丢弃”一些对象以保持其最大大小。

关于python - Deque 在 Python 中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679914/

相关文章:

c# - 如何同时大量入队和出队?

c++ - 当 T 没有复制构造函数时,std::queue<T> 的虚拟包装器不编译

python - 查看 python 脚本是否在 IDLE 或终端/命令提示符下运行

python - Plonformgen 动态填充选择字段

Python 目录等同于 perl?

python - 使用 sympy 对具有符号输出的函数求和

python - 使用 Matplotlib、PyQt 和 Threading 进行实时绘图以 python 崩溃结束

algorithm - 我需要一些帮助来理解使用堆栈实现队列

c - 通过 push 和 pop 对 scanf 的不同期望

python docker 抛出错误 : AttributeError: module 'six' has no attribute 'PY34'