2015/05/26

Python Tips:文字列の中の文字をカウントしたい

Python で文字列中の各文字の出現回数をカウントする方法をご紹介します。

dict でカウント

まずは、最もシンプルな dict 型を使った方法から。

string = 'supercalifragilisticexpialidocious'

counter = {}
for c in string:
    if not c in counter:
        counter[c] = 1
    else:
        counter[c] += 1

print(counter)  # => {'a': 3, 'c': 3, 'e': 2, ...

defaultdict でカウント

つづいて、 collections ライブラリの defaultdict を使った方法。デフォルト値を決められる分、よりシンプルに書くことができます。

from collections import defaultdict

string = 'supercalifragilisticexpialidocious'

# デフォルト値が 0 の辞書を定義してカウンタとして使う
counter = defaultdict(lambda: 0)
for c in string:
    counter[c] += 1

print(dict(counter))  # => {'a': 3, 'c': 3, 'e': 2, ...

Counter でカウント

さらに Python 2 系では Python 2.7 から導入された Counter クラスを使った方法もあります。
こちらは Counter の名前のとおり、カウンタとしてそのまま利用できる機能を備えたクラスなので、さらにシンプルにカウンタを実現することができます。

from collections import Counter

string = 'supercalifragilisticexpialidocious'

# string を渡して Counter インスタンスを生成
counter = Counter(string)

print(counter['a'])  # => 3
print(dict(counter))  # => {'a': 3, 'c': 3, 'e': 2, ...

以上です。


参考
Python Tips:辞書にアイテムが存在しない場合のデフォルト値を設定したい
defaultdict — Python 公式ドキュメント
Counter — Python 公式ドキュメント
Counting repeated characters in a string in Python - Stack Overflow

0 件のコメント: