2015年12月5日

collections.Counter

コンテナの要素数を数える時に便利な collections.Counter を紹介します。
(※ collections.Counter は Python 3.1 からの機能です。)


'refrigerator'という単語に含まれている文字をカウントするプログラムを考えます。
dict内包表記を使うと、以下のように実装できます。

>>> s = 'refrigerator'

>>> d = {i:s.count(i) for i in set(s)}
>>> d
{'o': 1, 'a': 1, 'i': 1, 'r': 4, 't': 1, 'g': 1, 'f': 1, 'e': 2}

同様の処理を collections.Counter では以下のように実現できます。
>>> from collections import Counter

>>> c = Counter(s)
>>> c
Counter({'r': 4, 'e': 2, 'o': 1, 'g': 1, 'i': 1, 't': 1, 'a': 1, 'f': 1})

collections.Counter はいくつかの専用メソッドを備えています。要素数に関する何らかの値を取得したい場合に、これらのメソッドは有用です。
# 最多の要素を表示
>>> c.most_common(1)
[('r', 4)]

# 要素数 0 でもKeyErrorではない
>>> c['b']
0

頻繁には使わないけど、目的とガッチリ噛み合った時には非常に強力、そんなツールだと思います。

0 件のコメント:

コメントを投稿