Pythonでcollectionsのdequeを活用  Maxlen属性とMethodsの実例

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は、キューやスタックの実装などに活用することができます。