2014/05/20

Python Tips:リストの中の要素を要素別にカウントしたい

Pythonで、リスト中の要素の数を数える方法をご紹介します。

いちばんかんたんなのは collections ライブラリの Counter クラスを使う方法です。
import collections

以下、基本的な使い方を見ていきます。
import collections

s1 = 'すもももももももものうち'

count_dict = collections.Counter(s1)
# => Counter({'も': 8, 'ち': 1, 'す': 1, 'の': 1, 'う': 1})

Counter クラスのインスタンスは、辞書のような形で要素とその個数を格納したオブジェクトとなります。

上の例では文字列 s1 を渡していますが、リストを渡した場合でも同様に動作してくれます。

この Counter インスタンスから各要素を取り出すには items() keys() values() など辞書型と同名のメソッドを使います。
for k, v in count_dict.items():
    print k, v,
# => ち 1 も 8 す 1 の 1 う 1

順番に取り出すだけでなく、「多い方から◯個」といった取り出し方も可能です。多い方から指定した数だけ取り出すには most_common メソッドを使います。
print count_dict.most_common(2)
# => [('も', 8), ('ち', 1)]

順序は保存されていませんが、元の要素を分解して取り出すことなんかも可能です。
[x for x in count_dict.elements()]
# => ['す', 'も', 'も', 'も', 'も', 'も', 'も', 'も', 'も', 'う', 'の', 'ち']


以上です。


参考
python - How to count the frequency of the elements in a list? - Stack Overflow
8.3. collections — High-performance container datatypes — Python v2.7.6 documentation

0 件のコメント: