Pythonで文字列内の最初に繰り返される単語を見つける方法
文字列が1つ与えられ、その中で最初に繰り返し出現する単語を見つけるのが本記事のテーマです。この問題を実装する際には、Pythonの標準ライブラリである「collections」モジュールを活用します。collectionsが提供するCounter()クラスを使うことで、各単語の出現回数を簡単に集計できます。
アルゴリズム
処理の手順は以下のとおりです。
- 与えられた文字列をスペースで区切り、単語のリストに分割します。
- 単語のリストをCounter(辞書形式)に変換し、各単語の出現回数を集計します。
- 単語のリストを先頭から順に走査し、出現回数が1より多い最初の単語を特定します。
サンプルコード
# 文字列内で最初に繰り返される単語を見つける
from collections import Counter
def repeatedword(n):
# 与えられた文字列をスペースで区切って単語に分割
w = n.split(' ')
# 各単語の出現回数をカウント
con = Counter(w)
for key in w:
if con[key] > 1:
print('繰り返された単語 ::>', key)
return
# ドライバープログラム
if __name__ == '__main__':
n = input('文字列を入力してください ::')
repeatedword(n)
実行結果
文字列を入力してください ::We are all peaceful soul and blissful soul and loveful soul happy soul 繰り返された単語 ::> soul
コードの解説
まず、split(' ')メソッドによって入力文字列をスペースで分割し、単語のリストを作成します。次に、このリストをCounter()へ渡すと、「単語名 → 出現回数」という対応関係を持つオブジェクトが生成されます。
その後、元の単語リストを先頭から順番にループで走査し、Counter上の出現回数が2以上となる最初の単語を見つけた時点で出力して処理を終了します。このため、必ず「最初に繰り返された単語」だけが表示される仕組みになっています。
補足ポイント
- 大文字・小文字の扱い:この方法では「Soul」と「soul」は別々の単語としてカウントされます。区別せずに判定したい場合は、あらかじめlower()メソッドで文字列全体を小文字に変換しておくとよいでしょう。
- 句読点の扱い:カンマやピリオドが付いた単語は別の単語として扱われるため、必要に応じてreモジュールなどの正規表現で前処理を行うと判定精度が向上します。
-
Pythonで辞書(Counter)を使って文字列内の最初に繰り返される単語を検索する方法
与えられた文の中には、文が終わる前に同じ単語が繰り返して登場することがあります。この記事では、Pythonを使って文中で最初に繰り返された単語を検出するプログラムを紹介します。 処理の流れ このプログラムでは、以下の手順で目的の単語を特定します。 与えられた文字列をスペース区切りで単語に分割する collectionsモジュールを使って、分割した単語を辞書形式(カウンタ)に変換する 単語のリストを先頭から順に走査し、出現頻度が1より大きい最初の単語を見つける プログラム:繰り返される単語を検索する 以下のプログラムでは、collectionsパッケージに含まれるCounterクラスを使用し
-
Pythonで文字列内のn番目に出現する部分文字列の位置を見つける方法
Pythonでは、split()メソッドを活用することで、文字列内にn番目に出現する部分文字列の位置(インデックス)を簡単に求めることができます。基本的な考え方手順は以下の通りです。対象の部分文字列を区切り文字として、最大 n+1 回だけ文字列を分割します。分割後のリストの要素数が n+1 より大きければ、その部分文字列は少なくとも n 回以上出現していることになります。出現位置は、「元の文字列の長さ − 最後の分割部分の長さ − 部分文字列の長さ」というシンプルな式で計算できます。コード例def findnth(string, substring, n): parts = strin