pytho****@googl*****
pytho****@googl*****
2011年 2月 20日 (日) 00:57:59 JST
Revision: 2ec3ca2b0c Author: Toshiyuki Kawanishi <toshi****@gmail*****> Date: Sat Feb 19 07:51:29 2011 Log: tutorial/datastructures.rst 差分翻訳 http://code.google.com/p/python-doc-ja/source/detail?r=2ec3ca2b0c Modified: /tutorial/datastructures.rst ======================================= --- /tutorial/datastructures.rst Sat Nov 27 11:01:10 2010 +++ /tutorial/datastructures.rst Sat Feb 19 07:51:29 2011 @@ -126,21 +126,28 @@ .. sectionauthor:: Ka-Ping Yee <ping****@lfw*****> -リストをキュー (queue) として手軽に使うこともできます。キューでは、最初に追 加された要素が最初に取り出されます ("first-in, first- -out")。キューの末尾に項目を追加するには :meth:`append` を使います。キューの 先頭から項目を取り出すには インデクスに ``0`` -を指定して :meth:`pop` を使います。例えば以下のようにします。 +ひとつの可能性として、リストをキュー (queue) として使うこともありえます。 +この場合、最初に追加した要素を最初に取り出します ("first-in, first-out")。 +しかし、リストでは効率的にこの目的を達成することが出来ません。 +追加(append)や取り出し(pop)をリストの末尾に対しておこなうと速いのです が、 +挿入(insert)や取り出し(pop)をリストの先頭に対しておこなうと遅くなってし まいます +(他の要素をひとつずつずらす必要があるからです)。 + +キューの実装には、 :class:`collections.deque` を使うと良いでしょう。 +このクラスは良く設計されていて、高速な追加(append)と取り出し(pop)を両端 に対して実現しています。例えば以下のようにします。 :: - >>> queue = ["Eric", "John", "Michael"] - >>> queue.append("Terry") # Terry が到着 (arrive) する - >>> queue.append("Graham") # Graham が到着する - >>> queue.pop(0) + >>> from collections import deque + >>> queue = deque(["Eric", "John", "Michael"]) + >>> queue.append("Terry") # Terry arrives + >>> queue.append("Graham") # Graham arrives + >>> queue.popleft() # The first to arrive now leaves 'Eric' - >>> queue.pop(0) + >>> queue.popleft() # The second to arrive now leaves 'John' - >>> queue - ['Michael', 'Terry', 'Graham'] + >>> queue # Remaining queue in order of arrival + deque(['Michael', 'Terry', 'Graham']) .. _tut-functional: