在尝试用 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/