PythonのCollections  Counter, Default, DequeとListを活用

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モジュールは、高度な操作を行うために必要不可欠なモジュールであり、コードの短縮化や処理速度の向上にも貢献します。