Pythonのcollectionsモジュールについて
Pythonのcollectionsモジュールは、標準ライブラリに含まれているモジュールであり、Pythonの様々なデータ構造を提供しています。collectionsモジュールには、リスト、辞書、セット、デック(deque)、カウンター(counter)などがあります。
dequeとは何か
deque(デック)は、ダブルエンドキュー(double-ended queue)とも呼ばれるデータ構造で、リストと同様に順序付きの要素の集まりです。dequeは、リストと比較して、先頭と末尾の両方から要素の追加、削除が高速に行えるという特徴があります。
dequeのmaxlen属性の説明とその利用方法
dequeには、maxlen属性があります。maxlen属性を設定することで、dequeに追加される要素の数を制限することができます。maxlen属性を設定したdequeに要素を追加する場合、dequeの先頭から要素を削除して、要素の数がmaxlenに達するまで要素を追加します。
以下のコードは、maxlen属性を設定したdequeを定義し、要素を追加する例です。
from collections import deque # maxlen属性を設定したdequeを定義 d = deque(maxlen=3) # 要素を追加 d.append(1) d.append(2) d.append(3) print(d) # deque([1, 2, 3], maxlen=3) d.append(4) print(d) # deque([2, 3, 4], maxlen=3)
上記の例では、maxlen属性を3に設定したdequeを定義し、要素を追加しています。要素を4つ追加すると、先頭の要素1が削除され、dequeには2, 3, 4の3つの要素が残ります。
dequeの主要なメソッド(Methods)について
dequeには、以下のような主要なメソッドがあります。
- append(x):dequeの末尾に要素を追加する。
- appendleft(x):dequeの先頭に要素を追加する。
- extend(iterable):iterableに含まれる要素をdequeの末尾に追加する。
- extendleft(iterable):iterableに含まれる要素をdequeの先頭に追加する。
- pop():dequeの末尾から要素を削除して、その要素を返す。
- popleft():dequeの先頭から要素を削除して、その要素を返す。
- clear():dequeの要素を全て削除する。
- rotate(n):dequeをn回転させる。nが正の場合は右に回転、負の場合は左に回転する。
dequeのメソッドを活用した実例の紹介
以下のコードは、dequeのメソッドを活用した実例です。このプログラムは、キーボードから入力された文字列を、最近入力されたものから順に表示するプログラムです。
from collections import deque # maxlen属性を設定したdequeを定義 d = deque(maxlen=5) while True: # キーボードから入力された文字列を取得 s = input("Enter a string: ") # 入力された文字列をdequeの末尾に追加 d.append(s) # 入力された文字列を最近入力されたものから順に表示 print("Recent strings: ", end="") for string in reversed(d): print(string, end=" ") print()
上記の例では、maxlen属性を5に設定したdequeを定義し、キーボードから入力された文字列をdequeに追加しています。そして、最近入力されたものから順に表示しています。
dequeの活用によるプログラミングの効率化
dequeは、リストと比較して、先頭と末尾の両方から要素の追加、削除が高速に行えるため、キュー(queue)やスタック(stack)を実装する際に便利です。
以下のコードは、キューを実装する例です。
from collections import deque class Queue: def __init__(self): self.items = deque() def enqueue(self, item): self.items.append(item) def dequeue(self): return self.items.popleft() def is_empty(self): return not self.items def size(self): return len(self.items)
上記の例では、dequeを使って、キューを実装しています。enqueueメソッドで要素を追加し、dequeueメソッドで先頭から要素を削除しています。is_emptyメソッドでキューが空かどうかを調べ、sizeメソッドでキューの要素数を取得しています。
まとめ
Pythonのcollectionsモジュールに含まれるdequeは、リストと比較して、先頭と末尾の両方から要素の追加、削除が高速に行えるデータ構造です。maxlen属性を設定することで、dequeに追加される要素の数を制限することができます。また、dequeには、append、pop、clear、rotateなどの主要なメソッドがあります。dequeは、キューやスタックの実装などに活用することができます。