2016-07-31 48 views
2

我在嘗試在Python中重新創建隊列和堆棧時,無法理解下面的代碼片段中的deque如何工作。Deque如何在Python中工作

堆棧示例 - 明白了

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

+2

您應該查看['deque'](https://docs.python.org/3/library/collections.html)文檔。您可能正在尋找['dq.popleft()'](https://docs.python.org/3/library/collections.html#collections.deque.popleft)(或'.appendleft()')。在任何一種情況下,出列中的「de」代表「雙端」。 – jedwards

+0

爲什麼它有什麼不同? – zondo

回答

5

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

因此,pop()操作仍會使它像堆棧一樣工作,就像列表一樣。爲了使它像一個隊列,使用popleft()命令。 Deques支持這兩種行爲,並且這樣pop()函數在數據結構中是一致的。爲了使隊列行爲像隊列一樣,你必須使用對應於隊列的函數。因此,在第二個示例中用popleft()替換pop(),並且您應該看到您期望的FIFO行爲。

Deques也支持最大長度,這意味着當您向deque添加大於maxlength的對象時,它會從相反一端「丟棄」一些對象以保持其最大尺寸。