Pythonで文字列内に含まれる部分文字列の出現位置をすべて取得する方法
文字列の中から特定の部分文字列が出現する位置をすべて取得したい場合、シンプルなリスト内包表記と startswith メソッドを組み合わせることで実現できます。この記事では、その具体的な実装方法をコード例とともに解説します。
サンプルコード
以下は、文字列内の部分文字列の出現位置をすべて取得する実装例です。
my_string = "Is python fun to learn?"
print("The list is :")
print(my_string)
substring = "pyt"
print("The substring is :")
print(substring)
my_result = [i for i in range(len(my_string)) if my_string.startswith(substring, i)]
print("The result is :")
print(my_result)出力結果
The list is : Is python fun to learn? The substring is : pyt The result is : [3]
処理の流れと解説
まず、対象となる文字列を定義し、コンソールに表示します。
次に、検索対象となる部分文字列を定義し、同様に表示します。
リスト内包表記を使用して、文字列の各インデックス(0から文字数-1まで)を順番に走査します。
startswithメソッドは、第2引数で指定した開始位置以降の文字列が、第1引数のパターン(部分文字列)で始まるかどうかを判定します。条件が真(True)になったインデックスのみがリストに追加され、最終的な結果として格納されます。
この例では、「pyt」という部分文字列がインデックス3の位置に出現しているため、結果として
[3]が得られます。
補足:startswithメソッドのポイント
startswith は通常「文字列が指定した接頭辞で始まるか」を判定するメソッドですが、第2引数に開始位置を渡すことで、任意の位置からの照合が可能になります。これにより、ループと組み合わせるだけで文字列全体を効率的にスキャンでき、部分文字列の重複出現もすべて検出できます。
-
Pythonの辞書からすべてのキーをリストとして取得する方法
Pythonの辞書(dict)からすべてのキーをリストとして取得したい場合、最もシンプルな方法は dict.keys() メソッドを使うことです。このメソッドは辞書内のすべてのキーを含むビューオブジェクトを返すため、list() で囲むことで簡単にリストへ変換できます。keys()メソッドを使う例my_dict = {name: TutorialsPoint, time: 15 years, location: India} key_list = list(my_dict.keys()) print(key_list)出力実行すると、次のような結果が得られます。[name, time, loc
-
Pythonで3つ以上の文字列から最長の共通部分文字列を見つける方法【動的計画法】
最長共通部分文字列(Longest Common Substring)を求めるアルゴリズムは、動的計画法(DP)を用いることで効率的に解けます。一般的なDP実装では、O(nm)の時間計算量で処理が可能です(n、mは比較対象となる文字列の長さ)。以下に、最長共通部分文字列アルゴリズムの実装例を示します。 実装例 def longest_common_substring(s1, s2): m = [[0] * (1 + len(s2)) for i in range(1 + len(s1))] lon