1. ホーム
  2. パイソン

Pythonのコレクションモジュールdeque()の説明

2022-03-02 15:22:53
<パス

Pythonのコレクションモジュールdequeの説明

collections モジュール ==> Python 標準ライブラリ、データ構造でよく使われるモジュール。collections には、list、dict、set、tuples などの Python の組み込みコンテナに代わる特別なコンテナが含まれています。

collectionsモジュールの一般的な型は以下の通りです。

deque()

deque はスタックとキューの一般化された実装です。deque は "double-end queue" の略で、deque の両端の要素の挿入と削除をスレッドセーフでメモリ効率の良い、おおよそ O(1) のパフォーマンスでサポートしています。list も同様の操作をサポートしていますが、主に固定長の操作に最適化されているので pop(0) と insert(0,v) (データの位置とサイズを変える)に対する時間複雑度は O(n) とされています。

よく使われるメソッド

append()

右端から要素を追加する ( Same as list )

st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.append(4)
dlist1.append("k")
print(dst)
print(dlist1)
#Results.
#deque(['a', 'b', 'c', 'd', 4])
#deque([0, 1, 2, 3, 'k'])


appendleft()

左端から要素を追加する

st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.appendleft(4)
dlist1.appendleft("k")
print(dst)
print(dlist1)
#Result.
#deque([4, 'a', 'b', 'c', 'd'])
#deque(['k', 0, 1, 2, 3])


extend()

イテレート可能なオブジェクトを右端から一つずつ追加する ( Same as list )
Pythonの反復可能なオブジェクトは、リスト、タプル、ディクショナリ、文字列です。

from collections import deque
ex = (1, "h", 3)
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.extend(ex)
dlist1.extend(ex)
print(dst)
print(dlist1)
#Results.
#deque(['a', 'b', 'c', 'd', 1, 'h', 3])
#deque([0, 1, 2, 3, 1, 'h', 3])


extendleft()

反復可能なオブジェクトを左端から一つずつ追加していく
Pythonの反復可能なオブジェクトは、リスト、タプル、ディクショナリ、文字列です。

from collections import deque

ex = [("a", 1), 3]
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
dst.extend(ex)
dlist1.extend(ex)
print(dst)
print(dlist1)
#Results.
#deque(['a', 'b', 'c', 'd', ('a', 1), 3])
#deque([0, 1, 2, 3, ('a', 1), 3])


pop()

リストから要素を削除し (デフォルトでは右端の要素)、その要素の値を返します ( Same as list 要素がない場合はIndexErrorが報告されます。

from collections import deque
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
p = dst.pop()
p1 = dlist1.pop()
print(p)
print(p1)
print(dst)
print(dlist1)
#result:
#d
#3
#deque(['a', 'b', 'c'])
#deque([0, 1, 2])


popleft()

リストから要素をひとつ削除し (デフォルトでは一番左)、その要素の値を返します。要素がない場合は IndexError が発生します。

from collections import deque
st = "abcd"
list1 = [0, 1, 2, 3]
dst = deque(st)
dlist1 = deque(list1)
p = dst.popleft()
p1 = dlist1.popleft()
print(p)
print(p1)
print(dst)
print(dlist1)
#result:
#a
#0
#deque(['b', 'c', 'd'])
#deque([1, 2, 3])


count()

キュー内の要素数をカウントします ( Same as list )

from collections import deque

st = "abbcd"
dst = deque(st)
p = dst.count("b")
print(dst)
print(p)
#result:
#deque(['a', 'b', 'b', 'c', 'd'])
#2


insert(インデックス,オブジェ)

指定された位置に要素を挿入する ( Same as list )

from collections import deque

st = "abbcd"
dst = deque(st)
dst.insert(0, "chl")
print(dst)
#result:
#deque(['chl', 'a', 'b', 'b', 'c', 'd'])


回転(n)

rotate(n)は、右からnステップ、nが負の場合は左から反転させます。
d.rotate(1) は d.appendleft(d.pop()) と同じ意味です。

from collections import deque

st = "abbcd"
dst = deque(st)
dst.rotate(1)
print(dst)
#result:
#deque(['d', 'a', 'b', 'b', 'c'])



clear()

deque のすべての要素を削除し、長さ 0 で終了します。

from collections import deque

st = "abbcd"
dst = deque(st)
dst.clear()
print(dst)
#result:
#deque([])


remove()

最初に出現した要素を削除し、見つからなかった場合は ValueError を報告します。

from collections import deque

st = "abbcd"
dst = deque(st)
dst.remove("a")
print(dst)
dst.remove("f")
#result:
#deque(['b', 'b', 'c', 'd'])
#ValueError: deque.remove(x): x not in deque


最大値

読み取り専用属性で、deque は最大長に制限されます。
長さに制限のある deque が制限以上のアイテムを追加した場合、反対側のアイテムは is automatically deleted .

from collections import deque

dst = deque(maxlen=2)
dst.append(1)
dst.append(2)
print(dst)
dst.append(3)
print(dst)
print(dst.maxlen)
#result:
#deque([1, 2], maxlen=2)
#deque([2, 3], maxlen=2)
#2


さらに、deque は反復処理、シリアライゼーション、および len(d), reversed(d), copy.copy(d), copy.deepcopy(d) また、in 演算子によるメンバテストや添え字のインデックス付けも可能です。