🎲

pythonのcollectionsモジュールについて纏めてみた

2023/06/12に公開

Pythonのcollectionsモジュールは、リスト、タプル、辞書などの基本的なデータ構造を拡張した特殊なデータ構造を提供します。以下に、その中の主要なものをいくつか紹介します。

  1. namedtuple: namedtupleは、タプルのサブクラスで、フィールドに名前を付けることができます。これにより、インデックスではなく名前でフィールドにアクセスできます。
from collections import namedtuple

# 'Person'という名前の新しいタプルのサブクラスを作成します。
Person = namedtuple('Person', ['name', 'age'])

bob = Person(name='Bob', age=30)
print(bob.name)  # Output: Bob
print(bob.age)  # Output: 30
  1. deque: deque(デック)は、両端に対する要素の追加や削除が高速なリストのようなデータ構造です。スタックやキューの実装に便利です。
from collections import deque

d = deque()
d.append('a')  # 右端に要素を追加
d.appendleft('b')  # 左端に要素を追加
print(d)  # Output: deque(['b', 'a'])
  1. Counter: Counterは、要素の出現回数を数えるための辞書型のサブクラスです。
from collections import Counter

c = Counter('hello world')
print(c)  # Output: Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
  1. defaultdict: defaultdictは、存在しないキーに対するアクセスでもエラーを返さずにデフォルト値を返す辞書型のサブクラスです。
from collections import defaultdict

d = defaultdict(int)
print(d['nonexistent_key'])  # Output: 0, エラーにならずに0が返されます。
  1. OrderedDict: OrderedDictは、要素を追加した順序を保持する辞書型のサブクラスです。Python 3.7以降では、通常の辞書も挿入順を保持するため、OrderedDictの主な利点は、要素の順序を再配置するreorder()メソッドと、二つのOrderedDictが同じ順序で要素を持つかどうかを比較する能力です。
from collections import OrderedDict

d = OrderedDict()
d['first'] = 1
d['second'] = 2
d['third'] = 3
print(d)  # Output: OrderedDict([('first', 1), ('second',

2), ('third', 3)])

これらのデータ構造は、特定の問題を解決するために非常に便利です。例えば、namedtupleは複数の属性を持つオブジェクトを表現するのに便利で、dequeは高速な挿入と削除が必要な場合に便利です。Counterdefaultdictは、要素の出現回数を数える、グループ化する、デフォルト値を持つ辞書を作成するなど、特定の問題を解決するために非常に便利です。

Discussion