Pythonのcountメソッドを使う方法をわかりやすく解説

243, 2021-05-05

目次

Pythonのcountメソッドの使い方

Pythonには文字列やリスト、タプルなどのオブジェクトの持つ要素をカウントするメソッドcount()があります。
このcount()を使うことでオブジェクト内の指定の要素の数をカウントすることができます。

この記事では↓の項目について解説します。

  • カウントの定義

  • count()の構造

  • 文字列の特定の文字のカウント

  • リストの特定の要素のカウント

  • タプルの特定の要素のカウント

  • 辞書のカウント

  • collections.Counterを使ったカウント

カウントの定義

この記事で扱う「カウント」の定義とは、特定のオブジェクト内に指定の要素がいくつ存在するかということになります。
たとえば↓のような文字列があるとします。

'aaabbc'

この文字列内のbの文字を数えると、その数は2になります。
これは「文字列の特定の文字をカウントする」という意味になります。
この記事での「カウント」はこのような意味で扱います。

文字列の特定の文字のカウント

文字列でカウントするには文字列のメソッドcount()を使います。

str.count()の構造

str.count()は↓のような構造になっています。

count(sub[, start[, end]])

subにはカウントしたい要素を指定します。
オプションのstartにはカウントを始めたいオブジェクト内の位置を指定します。
オプションのendにはカウントを終了させたいオブジェクト内の位置を指定します。

startendはカウントする範囲です。
たとえばstart3, end5を指定した場合、count()はオブジェクト内の3から5の範囲でカウントします。
これはリストであれば添え字に相当します。

count()は返り値としてintを返します。
これはカウント数です。

特定の文字をカウントする

↓のような文字列があるとして、

s = 'aaabbcaa'

この文字列にはcount()メソッドがあります。

print(type(s.count))
# <class 'builtin_function_or_method'>

指定の文字、たとえばaをカウントしたい場合、↓のようなコードになります。

n = s.count('a')

print(type(n))
# <class 'int'>

print(n)
# 5

count()の第2引数にカウントの開始位置を指定し、第3引数を指定しないと、第2引数の開始位置から末尾までカウントします。

n = s.count('a', 3)
print(n)
# 2

count()の第2引数と第3引数に範囲を指定すると、count()はその範囲内でカウントします。

n = s.count('a', 3, 7)
print(n)
# 1

↑のコードを日本語にすると「3から7より下までaの数をカウント」になります。
「3から7以下」ではないので注意が必要です。

リストの特定の要素のカウント

リスト内の特定の要素をカウントしたい場合はリストのcount()を使います。

list.count()の構造

list.count()は↓のような構造になっています。

list.count(value, /)

list.count()は引数xの数をリストからカウントします。

特定の要素をカウントする

↓のようなリストがあるとして、

l = [1, 1, 1, 2, 2, 3]

このリストにはcount()メソッドがあります。

print(type(l.count))
# <class 'builtin_function_or_method'>

特定の要素、たとえば2の数をカウントしたい場合は↓のようにします。

n = l.count(2)

print(n)
# 2

タプルの特定の要素のカウント

タプル内の特定の要素をカウントしたい場合はタプルのcount()を使います。

tuple.count()の構造

tuple.count()の構造は↓のようになっています。

tuple.count(value, /)

第1引数のvalueにはカウントしたい値を指定します。

特定の要素をカウントする

↓のようなタプルがあるとします。

t = (1, 1, 1, 2, 2, 3)

タプルにはcount()メソッドが存在します。

print(type(t.count))
# <class 'builtin_function_or_method'>

特定の要素、たとえば3をカウントしたい場合は↓のようなコードになります。

n = t.count(3)
print(n)
# 1

辞書のカウント

辞書のカウントはひと手間必要です。
というのも、辞書にはcount()がないためです。
もちろんitems()keys()values()などの結果のオブジェクトにもありません。
↓のコードで確認できます。

d = {'a': 1, 'a': 2, 'b': 2}

try:
    d.count('a')
except AttributeError as e:
    print(e)
    # 'dict' object has no attribute 'count'

try:
    d.items().count()
except AttributeError as e:
    print(e)
    # 'dict_items' object has no attribute 'count'

try:
    d.keys().count()
except AttributeError as e:
    print(e)
    # 'dict_keys' object has no attribute 'count'

try:
    d.values().count()
except AttributeError as e:
    print(e)
    # 'dict_values' object has no attribute 'count'

keys()values()の結果はリストに変換することが可能です。
そのためキーや値をカウントしたい場合は↓のようなコードを書きます。

n = list(d.keys()).count('a')
print(n)
# 1
# 重複したキーは除外されているため1になる

n = list(d.values()).count(2)
print(n)
# 2

collections.Counterを使ったカウント

Pythonの標準ライブラリであるcollections.Counterを使うと統計的なカウントを取ることができます。

from collections import Counter

l = ['a', 'a', 'a', 'b', 'b', 'c']
c = Counter(l)

print(c)
# Counter({'a': 3, 'b': 2, 'c': 1})

print(c['a'])
# 3

print(c['b'])
# 2

print(c['c'])
# 1

↑のようにCounter()にカウントさせたいオブジェクトを渡します。
Counter()は辞書のようなインターフェースを持っています。
参照したいキーを角カッコで参照することで、そのキーのカウント数を得ることができます。

↑の場合だとaのカウント数は3, bのカウント数は2, cのカウント数は1になっています。
これはリストlのカウントの結果です。

おわりに

今回はPythonのcount()の使い方を解説しました。

カウントして現状を把握

カウント王に俺はなる

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。