Pythonで文字列内の各文字の出現回数を調べる方法【3つのアプローチ解説】
この記事では、指定された文字列の中に、それぞれの文字が何回出現するかを求める方法について解説します。
問題設定: 1つの文字列が与えられたとき、その文字列に含まれる各文字の出現回数を求める必要があります。
ここでは、以下の3つのアプローチを順番に見ていきましょう。
アプローチ1:素朴な全走査(ブルートフォース)
最も基本的な方法は、文字列を1文字ずつループで走査し、辞書を使って出現回数を記録していくやり方です。すでに辞書に存在する文字であればカウントを1増やし、初めて登場した文字であれば新しくキーとして追加します。
コード例
test_str = "Tutorialspoint"
# カウント用の辞書
count_dict = {}
for i in test_str:
# 辞書に既に存在する文字の場合
if i in count_dict:
count_dict[i] += 1
# 新しく追加する文字の場合
else:
count_dict[i] = 1
print("Count of all characters in Tutorialspoint is :\n " +
str(count_dict))
出力結果
Count of all characters in Tutorialspoint is :
{'T': 1, 'u': 1, 't': 2, 'o': 2, 'r': 1, 'i': 2, 'a': 1, 'l': 1, 's': 1, 'p': 1, 'n': 1}
この方法はロジックが分かりやすい反面、コード量がやや多くなるのが特徴です。大文字と小文字は別の文字として扱われる点にも注意しましょう(例:'T' と 't')。
アプローチ2:collectionsモジュールのCounterを使う
Pythonの標準ライブラリ collections には、要素の出現回数を簡単に数えられる Counter クラスが用意されています。わずか数行で同じ処理を実現できるため、実務でもよく使われる方法です。
コード例
from collections import Counter
test_str = "Tutorialspoint"
# collections.Counter() を使って辞書を生成
res = Counter(test_str)
print("Count of all characters in Tutorialspoint is :\n " +
str(dict(res)))
出力結果
Count of all characters in Tutorialspoint is :
{'T': 1, 'u': 1, 't': 2, 'o': 2, 'r': 1, 'i': 2, 'a': 1, 'l': 1, 's': 1, 'p': 1, 'n': 1}
Counter を使うことで、ループや条件分岐を自分で書く必要がなくなり、コードが非常にシンプルになります。パフォーマンス面でもC言語レベルで最適化されているため、大きな文字列に対しても高速に動作します。
アプローチ3:set()と辞書内包表記を組み合わせる
3つ目の方法は、set() で文字列から重複のないユニークな文字を取り出し、辞書内包表記の中で count() メソッドを使って各文字の出現回数を数えるやり方です。
コード例
test_str = "Tutorialspoint"
# set() で文字列中のユニークな文字を取得し、出現回数を計算
res = {i : test_str.count(i) for i in set(test_str)}
print("Count of all characters in Tutorialspoint is :\n " +
str(dict(res)))
出力結果
Count of all characters in Tutorialspoint is :
{'T': 1, 'u': 1, 't': 2, 'o': 2, 'r': 1, 'i': 2, 'a': 1, 'l': 1, 's': 1, 'p': 1, 'n': 1}
この方法はコードが簡潔でPythonらしい書き方ですが、count() が文字ごとに文字列全体を走査するため、文字種が多い長い文字列では計算量が O(n²) になりやすく、大量データには不向きです。短い文字列や可読性を優先したい場面で活用するとよいでしょう。
まとめ
この記事では、Pythonを使って文字列内の各文字の出現回数を求める3つの方法を紹介しました。
- ブルートフォース方式: ロジックの理解に最適。学習用途に向いています。
- collections.Counter: コードが最もシンプルで、実務での利用におすすめ。
- set() + 辞書内包表記: 簡潔だが、長い文字列ではパフォーマンスに注意が必要。
目的やデータサイズに応じて、適切な方法を選択してください。
-
Pythonで指定されたインデックスに基づいて文字列をシャッフルする方法
文字列 s とインデックスのリスト ind が与えられ、両者は同じ長さであるとします。文字列 s は、位置 i にある文字が最終的な文字列内の ind[i] の位置へ移動するようにシャッフルされます。このとき、シャッフル後の最終的な文字列を求める必要があります。例えば、入力が s = ktoalak、ind = [0,5,1,6,2,4,3] の場合、出力は kolkata となります。解決手順この問題を解くには、以下の手順に従います。fin_str を s と同じサイズのリストとして作成し、0で初期化するs 内の各インデックス i と各文字 v に対して、次の操作を行うfin_str[ind
-
Pythonで文字列内のミラー文字を検索する方法【初心者向け解説】
ユーザーが入力した文字列と位置(ポジション)が与えられたとき、その位置から文字列の末尾までの文字を、アルファベット順を反転させた「ミラー文字」に変換するプログラムを作成します。この操作では、「a」→「z」、「b」→「y」、「c」→「x」、「d」→「w」のように、アルファベットの最初の文字が最後の文字に対応する形で置き換えを行います。 入力: p = 3 入力文字列 = python 出力: pygslm 上記の例では、3番目の位置以降の文字「t」「h」「o」「n」が、それぞれ逆順のアルファベット「g」「s」「l」「m」に変換されていることがわかります。先頭から指定位置までは元の文字列