2016-07-31 3 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」は「double-ended」の略です。 – jedwards

+0

どうして違うのですか? – zondo

答えて

5

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

したがって、pop()操作では、リストのようにスタックのように動作します。キューのように動作させるには、popleft()コマンドを使用します。デキューは両方の動作をサポートするように作られており、このようにpop()関数はデータ構造全体で一貫しています。両端キューをキューのように動作させるには、キューに対応する関数を使用する必要があります。したがって、2番目の例ではpop()をpopleft()に置き換えると、期待するFIFOの動作がわかるはずです。

Dequesもmax lengthをサポートしています。つまり、最大長を超えるオブジェクトを両端キューに追加すると、最大サイズを維持するために反対側の端から数多くのオブジェクトを「ドロップ」します。

関連する問題