【问题标题】:How Does Deque Work in Python双端队列在 Python 中是如何工作的
【发布时间】:2016-07-31 01:14:11
【问题描述】:

在尝试在 Python 中重新创建队列和堆栈时,我无法理解双端队列在下面代码的 sn-p 中的工作原理。

堆栈示例 - 了解

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)吗?

【问题讨论】:

  • 您应该查看deque 文档。您可能正在寻找dq.popleft()(或.appendleft())。无论哪种情况,dequeue 中的“de”都代表“双端”。
  • 为什么要有所不同?

标签: python queue


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2012-09-14
    • 2016-05-11
    • 1970-01-01
    • 2018-07-02
    • 2023-04-02
    • 2018-09-08
    相关资源
    最近更新 更多