🎲
pythonのcollectionsモジュールについて纏めてみた
Pythonのcollections
モジュールは、リスト、タプル、辞書などの基本的なデータ構造を拡張した特殊なデータ構造を提供します。以下に、その中の主要なものをいくつか紹介します。
-
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
-
deque:
deque
(デック)は、両端に対する要素の追加や削除が高速なリストのようなデータ構造です。スタックやキューの実装に便利です。
from collections import deque
d = deque()
d.append('a') # 右端に要素を追加
d.appendleft('b') # 左端に要素を追加
print(d) # Output: deque(['b', 'a'])
-
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})
-
defaultdict:
defaultdict
は、存在しないキーに対するアクセスでもエラーを返さずにデフォルト値を返す辞書型のサブクラスです。
from collections import defaultdict
d = defaultdict(int)
print(d['nonexistent_key']) # Output: 0, エラーにならずに0が返されます。
-
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
は高速な挿入と削除が必要な場合に便利です。Counter
とdefaultdict
は、要素の出現回数を数える、グループ化する、デフォルト値を持つ辞書を作成するなど、特定の問題を解決するために非常に便利です。
Discussion