在尝试使用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)吗?
答案 0 :(得分:8)
A deque is a generalization of stack and a queue (It is short for "double-ended queue")
因此,pop()操作仍然使它像堆栈一样运行,就像它作为列表一样。要使其像队列一样,请使用popleft()命令。 Deques用于支持两种行为,这样pop()函数在数据结构中是一致的。为了使deque像队列一样,您必须使用与队列对应的函数。因此,在第二个示例中将pop()替换为popleft(),您应该会看到您期望的FIFO行为。
Deques也支持最大长度,这意味着当你向deque中添加的对象大于maxlength时,它会" drop"另一端的许多物体保持其最大尺寸。