Pythonのコレクションモジュールdeque()の説明
Pythonのコレクションモジュールdequeの説明
collections モジュール ==> Python 標準ライブラリ、データ構造でよく使われるモジュール。collections には、list、dict、set、tuples などの Python の組み込みコンテナに代わる特別なコンテナが含まれています。
collectionsモジュールの一般的な型は以下の通りです。
-
双方向キュー( ディケイド )
キューの先頭と末尾にある要素を素早く追加・削除するためのリスト型コンテナ
Please click
ディーク -
カウンタ ( カウンター )
ハッシュ化可能なオブジェクトを計算する dict のサブクラス
Please click
カウンター -
デフォルトの辞書( デフォルトディクト )
デフォルト値を提供する関数を呼び出すことができる dict のサブクラス
Please click
デフォルトディクト -
オーダーディクト
要素が追加された順番を記憶する dict のサブクラスです。 -
名前付きタプル(namedtuple)
名前を含むタプルを作成することができます
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 演算子によるメンバテストや添え字のインデックス付けも可能です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例