count()は、シーケンス型(リスト、タプル、range, 文字列etc)の共通メソッドで、特定の文字(列)や要素の出現回数をカウントしてくれます。例えば、
- ある文字列の中に文字”a”が何個あるか?
- リストに、”Apple”という要素が何個あるか?
こんな場合に便利です。
また、collections.Counter()は、リストに含まれる要素がそれぞれ何個あるのかをまとめて出力してくれます。テキストデータに含まれる単語の出現頻度をまとめて出力することにも使えそうです。
確認した環境
- OS:Ubuntu 18.04LTS
- Python:3.8.4
文字や文字列の出現回数を数える
str.count() は文字(列)の出現回数をカウントできます。
str.count(sub[, start[, end]])
文字列strの[start, end]で指定された範囲に、部分文字列subが何個あるかを返します。
具体的な例を以下に示します。
・文字の個数を数える
>>> s = 'aAaAAbAccdd'
# "A"という文字が何個あるか調べる
>>> s.count('A')
4
# s[2:9]に'A'が何個あるか調べる
>>> s.count('A', 2, 9)
3
・文字列の個数を調べる
>>> str = 'apple orange apple banana grape apple orange'
# "apple"が何個あるか調べる
>>> str.count('apple')
3
# "orange"が何個あるか調べる
>>> str.count('orange')
2
# "banana"が何個あるか調べる
>>> str.count('banana')
1
リストに含まれる要素の出現回数を数える
list.count() は、リストに要素xが何個あるかを返します。
list.count(x)
以下に例を示します。
>>> l = ['apple', 'orange', 'apple', 'banana', 'grape', 'apple', 'orange']
>>> l.count('apple')
3
尚、数値データをカウントする時は、文字列と数値が混在しないように気をつけましょう。文字列の’1’と数値型の1は異なります。
以下の例は、数値の1と、文字列の”1″が混在した場合です。
# 数値の1と、文字列の'1'が混在
>>> l = [1, 1.0, 2, '1']
# 数値型のみカウント(intとfloatは区別されない)
>>> l.count(1)
2
# 文字列のみカウント
>>> l.count('1')
1
タプルの要素の出現回数を数える
count()はシーケンス型共通のメソッドとして提供されているので、タプルにも使えます。
# タプルにも使えます
>>> t = ('a', 'b', 'a', 'c')
>>> t.count('a')
2
辞書の要素の出現回数を数える
以下は、辞書の要素の個数をカウントする例です。
辞書に対してはcount()はサポートされていないので、一旦リストに変換しています。
>>> d = {'a': 'aaa', 'b': 'bbb', 'c':'aaa'}
# 辞書のvalueをカウント
>>> list(d.values()).count('aaa')
2
# 辞書のkeyをカウント
>>> list(d.keys()).count('a')
1
どの要素が何個あるかを調べる
count()は特定の文字(列)の個数が返却されるだけでしたが、collectionsモジュールのCounter() を使うと、どの要素が何個あるか簡単に調べることができます。戻り値は辞書型になります。
>>> from collections import Counter
>>> l = ['apple', 'orange', 'apple', 'banana', 'grape', 'apple', 'orange']
>>> Counter(l)
Counter({'apple': 3, 'orange': 2, 'grape': 1, 'banana': 1})
まとめ
count()は、シーケンス型(リスト、タプル、range, 文字列etc)の共通メソッドとして提供されており、特定の文字列や要素の出現回数をカウントするのに便利。
また、Collections.Counter()を用いると、リストにどの要素が何個あるかを簡単に調べることができます。