Pythonには、様々なデータ構造を扱うためのモジュールがありますが、その中でもCollectionsモジュールは、より高度な操作を行うために必要不可欠なものです。
Collectionsモジュールには、以下のようなクラスが含まれています。
- Counter
- Defaultdict
- Deque
Counterの特徴と使い方
Counterクラスは、リストや文字列などの要素の出現回数をカウントし、辞書のように扱うことができます。
from collections import Counter lst = [1, 2, 3, 2, 1, 3, 4, 5, 2, 1] cnt = Counter(lst) print(cnt) # 出力結果: Counter({1: 3, 2: 3, 3: 2, 4: 1, 5: 1})
上記のように、リストをCounterに渡すことで、要素の出現回数が辞書形式で返されます。
また、most_common()メソッドを使うことで、出現回数の多い要素を指定した数だけ取得することができます。
from collections import Counter lst = [1, 2, 3, 2, 1, 3, 4, 5, 2, 1] cnt = Counter(lst) print(cnt.most_common(2)) # 出力結果: [(1, 3), (2, 3)]
上記のように、most_common(2)とすることで、出現回数の多い上位2つの要素が返されます。
Defaultdictの特徴と使い方
Defaultdictクラスは、辞書のように扱えるデータ構造で、存在しないキーを指定した場合に、デフォルト値を返すことができます。
from collections import defaultdict d = defaultdict(int) print(d["a"]) # 出力結果: 0
上記のように、存在しないキーを指定しても、int型のデフォルト値0が返されます。
また、デフォルト値を指定することもできます。
from collections import defaultdict d = defaultdict(lambda: "unknown") print(d["a"]) # 出力結果: unknown
上記のように、lambda関数を使って、デフォルト値を指定することができます。
Dequeの特徴と使い方
Dequeクラスは、スタックやキューのような機能を持ったデータ構造で、両端から要素を追加・削除することができます。
from collections import deque d = deque([1, 2, 3]) d.append(4) d.appendleft(0) print(d) # 出力結果: deque([0, 1, 2, 3, 4])
上記のように、append()メソッドで右端に要素を追加し、appendleft()メソッドで左端に要素を追加することができます。
また、popleft()メソッドで左端から要素を取り出すこともできます。
from collections import deque d = deque([1, 2, 3]) x = d.popleft() print(x) print(d) # 出力結果: # 1 # deque([2, 3])
これらのモジュールをリストと組み合わせる活用例
これらのモジュールを組み合わせることで、より高度な操作が可能になります。
例えば、リストの要素の出現回数をカウントして、出現回数の多い上位2つの要素を取得するには、以下のように書くことができます。
from collections import Counter, defaultdict lst = [1, 2, 3, 2, 1, 3, 4, 5, 2, 1] cnt = Counter(lst) d = defaultdict(list) for k, v in cnt.items(): d[v].append(k) top2 = [d[k] for k in sorted(d.keys(), reverse=True)[:2]] print(top2) # 出力結果: [[1, 2], [3]]
上記のように、Counterで出現回数をカウントし、その結果をデフォルト辞書に保存して、出現回数の多い上位2つの要素を取得しています。
Collectionsモジュールを活用するメリット
Collectionsモジュールを使うことで、以下のようなメリットがあります。
- 高度な操作が可能になる
- コードが短くなる
- 処理速度が向上する
まとめ
Collectionsモジュールに含まれるCounter、Defaultdict、Dequeクラスについて、それぞれの特徴と使い方を紹介しました。また、これらのモジュールを組み合わせることで、より高度な操作が可能になることを示しました。
Collectionsモジュールは、高度な操作を行うために必要不可欠なモジュールであり、コードの短縮化や処理速度の向上にも貢献します。