Pythonで文字列の接頭辞(プレフィックス)をカウントする方法:特定の文字の出現頻度を比較する
はじめに
このチュートリアルでは、文字列と2つのアルファベットを受け取り、「1つ目のアルファベットの出現回数が2つ目より多い接頭辞(プレフィックス)」を抽出して表示し、その合計数を出力するPythonプログラムを作成します。
例えば、文字列 "apple" に対してアルファベット "p" と "e" を指定した場合、先頭から1文字ずつ増やした各接頭辞の中で、"p" の出現回数が "e" より多いものだけを出力します。
動作例
入力例1
string: apple alphabets: p, e
出力例1
ap app appl apple Total prefixes matched: 4
この場合、"ap"、"app"、"appl"、"apple" の4つの接頭辞が条件を満たしているため、すべて出力され、最後に合計数「4」が表示されます。
入力例2
string: apple alphabets: e, p
出力例2
Total prefixes matched: 0
今度は条件が逆になり、どの接頭辞でも "e" の出現回数が "p" を上回らないため、何も出力されず合計数は「0」となります。
プログラムの流れ
コードは以下の手順で作成します。
関数を定義し、処理をその中に記述します。
カウント用の変数を
0で初期化し、空の文字列も準備します。文字列を先頭から順に走査します。
スライスとインデックスを使って接頭辞を取得し、変数に格納します。
接頭辞内での2つのアルファベットの出現回数を比較します。
条件を満たしていれば接頭辞を出力し、カウントを1つ増やします。
最後に合計カウント数を出力します。
サンプルコード
以下が実際のPythonコードです。文字列のスライス string[:i + 1] を使うことで、先頭から i+1 文字分の接頭辞を簡単に取得できます。また、str.count() メソッドを使えば、指定した文字の出現回数を手軽に調べられます。
# 複数回呼び出せるよう関数を定義
def prefixes(string, _1, _2):
# カウントを0で初期化
count = 0
# 比較用の空の文字列
prefix = ""
# 文字列を走査
for i in range(len(string)):
# 文字列から接頭辞を取得
prefix = string[:i + 1]
# 接頭辞内の2つのアルファベットの出現回数を比較
if prefix.count(_1) > prefix.count(_2):
# 条件を満たせば接頭辞を出力
print(prefix)
# カウントを1増やす
count += 1
# 合計カウント数を出力
print(f"Total prefixes matched: {count}")
if __name__ == '__main__':
# 関数の呼び出し
print(f"----------------apple p e---------------------")
prefixes('apple', 'p', 'e')
print()
print(f"----------------apple e p---------------------")
prefixes('apple', 'e', 'p')
実行結果
上記のコードを実行すると、次のような結果が出力されます。
----------------apple p e--------------------- ap app appl apple Total prefixes matched: 4 ----------------apple e p--------------------- Total prefixes matched: 0
コードのポイント解説
スライスによる接頭辞の生成:
string[:i + 1]のように書くことで、ループごとに先頭から徐々に長くなる接頭辞を効率的に作成できます。count()メソッド:文字列オブジェクトの組み込みメソッドで、引数に指定した文字(または部分文字列)の出現回数を返します。頻度比較に非常に便利です。計算量について: この方法はシンプルですが、ループのたびに接頭辞全体を再カウントするため、長い文字列ではやや非効率です。パフォーマンスが必要な場合は、文字の出現回数をインクリメントしながら追跡する方式に改良すると O(n) で処理できます。
まとめ
今回は、文字列の各接頭辞における2つのアルファベットの出現頻度を比較し、条件を満たす接頭辞とその総数を出力するプログラムを紹介しました。文字列のスライスと count() メソッドを組み合わせるだけで、直感的かつ簡潔に実装できるのがポイントです。ぜひ自分の環境でいろいろな文字列やアルファベットの組み合わせを試してみてください。
-
セットを使って文字列内の母音の数をカウントするPythonプログラム
本記事では、Pythonを使って文字列内に含まれる母音の数をカウントする方法について解説します。セット(set)を活用した効率的な実装を中心に、初心者の方にもわかりやすく説明していきます。 問題の概要 問題文:任意の文字列が与えられたとき、その文字列に含まれる母音の数をセットを使って数えます。 基本的なアプローチとしては、文字列全体を先頭から順に走査し、各文字が母音であるかどうかを判定します。母音であればカウントを1ずつ増やしていき、最終的な合計を出力します。 実装例 def vowel_count(str_): count = 0 # 母音をセットとして定義 vowe
-
指定された文字列のすべての順列を出力するPythonプログラム
本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +