このモジュールでは高性能なコンテナ・データ型を実装しています。 現在のところ、実装されている型は deque のみです。 将来的に B-tree と Fibonacci heap がふくまれるかもしれません。
[iterable]) |
Deque とは、スタックとキューを一般化したものです (この名前は「デック」と
発音され、これは「double-ended queue」の省略形です)。Deque はどちらの側からも
append と pop が可能で、スレッドセーフでメモリ効率がよく、どちらの方向からも
およそ O(1)
のパフォーマンスで実行できます。
list オブジェクトでも同様の操作を実現できますが、これは高速な
固定長の操作に特化されており、内部のデータ表現形式のサイズと位置を
両方変えるような "pop(0)" and "insert(0, v)" などの操作では
メモリ移動のために O(n)
のコストを必要とします。
バージョン 2.4 で 新たに追加 された仕様です。
Deque オブジェクトは以下のようなメソッドをサポートしています:
x) |
x) |
) |
iterable) |
iterable) |
) |
) |
n) |
上記の操作のほかにも、deque は次のような操作をサポートしています: イテレータ化、pickle、"len(d)"、"reversed(d)"、 "copy.copy(d)"、 "copy.deepcopy(d)"、 in 演算子による 包含検査、そして "d[-1]" などの添え字による参照。
例:
>>> from collections import deque >>> d = deque('ghi') # 3つの要素からなる新しい deque をつくる。 >>> for elem in d: # deque の要素をひとつずつたどる。 ... print elem.upper() G H I >>> d.append('j') # 新しい要素を右側につけたす。 >>> d.appendleft('f') # 新しい要素を左側につけたす。 >>> d # deque の表現形式。 deque(['f', 'g', 'h', 'i', 'j']) >>> d.pop() # いちばん右側の要素を削除し返す。 'j' >>> d.popleft() # いちばん左側の要素を削除し返す。 'f' >>> list(d) # deque の内容をリストにする。 ['g', 'h', 'i'] >>> d[0] # いちばん左側の要素をのぞく。 'g' >>> d[-1] # いちばん右側の要素をのぞく。 'i' >>> list(reversed(d)) # deque の内容を逆順でリストにする。 ['i', 'h', 'g'] >>> 'h' in d # deque を検索。 True >>> d.extend('jkl') # 複数の要素を一度に追加する。 >>> d deque(['g', 'h', 'i', 'j', 'k', 'l']) >>> d.rotate(1) # 右ローテート >>> d deque(['l', 'g', 'h', 'i', 'j', 'k']) >>> d.rotate(-1) # 左ローテート >>> d deque(['g', 'h', 'i', 'j', 'k', 'l']) >>> deque(reversed(d)) # 新しい deque を逆順でつくる。 deque(['l', 'k', 'j', 'i', 'h', 'g']) >>> d.clear() # deque を空にする。 >>> d.pop() # 空の deque からは pop できない。 Traceback (most recent call last): File "<pyshell#6>", line 1, in -toplevel- d.pop() IndexError: pop from an empty deque >>> d.extendleft('abc') # extendleft() は入力を逆順にする。 >>> d deque(['c', 'b', 'a'])