[解決!Python]文字列のcountメソッドで特定の部分文字列が含まれている数を数えるには解決!Python

文字列のcountメソッドを使って、ある文字列の中に特定の文字列(部分文字列)が何個含まれているかを調べる方法を紹介する。

» 2023年09月12日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

# 文字列の場合
s = 'Deep Insider'

c = s.count('e')
print(c)  # 3

c = s.count('E'# 大文字小文字は区別される
print(c)  # 0

c = s.count('e', 5# どこからカウントを始めるか
print(c)  # 1

c = s.count('e', 5, -2# どこからカウントを始めて、どこまでを対象とするか
print(c)  # 0

c = s.count('e', end=-2# TypeError:開始位置/終了位置は位置専用
c = s.count('e', 0, -2# 終了位置だけを指定したいときは開始位置として0を指定する

c = s.count(''# 空文字列を渡すと戻り値は文字列長+1になる
print(c)  # 13
print(len(s))  # 12

c = 'Deeeep Insider'.count('ee'# 重複部分がないようにカウントする
print(c)  # 2


文字列のcountメソッド

 文字列のcountメソッドを使うと、文字列内に特定の部分文字列がどれだけ含まれているかをカウントできる。

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


 文字列のcountメソッドではどこからどこまでの範囲で部分文字列のカウントを行うためにstart/endも指定できる。

 以下にシンプルな例を示す。

s = 'deep insider'

c = s.count('e')
print(c)  # 3


 この例では'Deep Insider'という文字列に部分文字列'e'が何個含まれているかをカウントしている。答えは見ての通りに3となる。

 このときには大文字と小文字は区別される。そのため、以下のように'E'の数をカウントするとその答えは0になる。

c = s.count('E'# 大文字小文字は区別される
print(c)  # 0


 どこからカウントするかは第2引数に指定する。なお、開始位置となる第2引数にxを、終了位置となる第3引数にyを指定した場合、それらは「文字列[x:y]」のようなスライスを指定したときと同様に解釈される(つまり、yで指定したインデックス位置よりも1つ前の文字までカウントの対象になる)。

 例えば、'Deep Insider'の'Insider'だけを対象とするのであれば第2引数に5を指定する。

c = s.count('e', 5# どこからカウントを始めるか
print(c)  # 1


 'Insider'の中に'e'は1文字だけあるので戻り値は1になる。

 以下は開始位置と終了位置を指定する例だ。

c = s.count('e', 5, -2# どこからカウントを始めて、どこまでを対象とするか
print(c)  # 0


 終了位置に指定した-2は末尾から2文字目、つまり'Insider'の'e'を指すが、上述したようにこの位置にある文字はカウントの対象とはならない。そのため、結果は0となる。

 なお、文字列のcountメソッドは位置指定引数のみを受け取る(位置専用引数)。そのため、開始位置を指定せずに終了位置だけを指定しようとして「end=-2」のような指定を行うと例外が発生することは覚えておこう。

c = s.count('e', end=-2# TypeError:開始位置/終了位置は位置専用


 終了位置だけを指定することはできないので、こうした場合は面倒でも開始位置として0を指定する。

c = s.count('e', 0, -2# 終了位置だけを指定したいときは開始位置として0を指定する


 カウント対象の部分文字列として空文字列('')を指定したときには、文字間に挟まれた空文字列の数が返される。このとき、その値は文字列長+1となる(文字列の先頭と0文字目、文字列の末尾と最後の文字にも空文字列が挟まれていると考えるとよいだろう)。

c = s.count(''# 空文字列を渡すと戻り値は文字列長+1になる
print(c)  # 13
print(len(s))  # 12


 最後に、countメソッドは指定した部分文字列が、元の文字列内で重複することがないようにカウントを行う。

 例えば、'Deep Insider'ではなく'Deeeep Insider'という文字列に'ee'が何個含まれているかをカウントすると次のように結果は2になる。

c = 'Deeeep Insider'.count('ee'# 重複部分がないようにカウントする
print(c)  # 2


 これは「D」の直後にある「ee」と「p」の直前にある「ee」の数がカウントされたということだ。「eeee」を「e0e1e2e3」と表現すると、「e0e1」と「e2e3」がカウントされている。重複が許されるのであれば「e0e1」と「e1e2」 と「e2e3」の3つがカウントされるがそうはならない点は覚えておこう。

「解決!Python」のインデックス

解決!Python

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。