Pythonのfind()メソッド徹底解説:文字列から部分文字列を検索する方法
Pythonのfind()メソッドは、ある文字列の中で特定の文字列が最初に現れるインデックス位置を取得するためのメソッドです。値が見つからない場合は-1を返し、見つかった場合は検索対象の開始インデックス位置を返します。
文字列の中から部分文字列を探すのは、Pythonプログラミングで非常によく使われる操作です。例えば、好きな本のタイトルが並んだ文字列があったとき、その中から特定の本がどこに含まれているかを調べたいことがあるでしょう。
そんなときに役立つのが、Pythonのfind()メソッドです。このメソッドを使えば、文字列の中から部分文字列を検索し、その最初の出現位置(インデックス)を取得できます。
この記事では、Pythonにおける文字列インデックスの基本を例とともに解説し、その後、find()メソッドを使って大きな文字列から部分文字列を検索する方法を紹介します。
Pythonのインデックスのおさらい
Pythonの文字列は、1つ以上の個々の文字からなるシーケンスです。文字列には、英字、空白、記号、数字などを含めることができます。
次の文字列を見てみましょう。
company = "Career Karma"
この文字列は12文字で構成されており、それぞれの文字が固有の位置(インデックス)を持っています。インデックスの対応は以下の通りです。
| C | a | r | e | e | r | K | a | r | m | a | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Pythonのfind()メソッドとは
Pythonのfind()メソッドは、ある文字列が別の文字列の中に最初に現れる位置を見つけます。値が見つからない場合は-1を返します。find()はPythonのindex()メソッドとよく似ていますが、index()は値が見つからない場合に例外(エラー)を発生させる点が異なります。
find()メソッドの構文は以下の通りです。
string_name.find(string_to_find, start, end)
find()メソッドは3つの引数を受け取ります。
- string_to_find:文字列内で検索したい部分文字列。(必須)
- start:検索を開始するインデックス位置。デフォルトは0。(省略可能)
- end:検索を終了するインデックス位置。(省略可能)
find()メソッドは、最初に出現する位置のうち最も小さいインデックスを返します。検索対象の部分文字列が見つからなかった場合は-1が返されます。
-1が返されたかどうかは、Pythonのif文で判定できます。これにより、検索したい値が見つからなかった場合の処理を、エラー処理を意識せずに適切に組み込むことができます。
それでは、find()メソッドの構文がわかったところで、実際の使用例を見ていきましょう。
Python find()の使用例
例1:文字列を検索する
ここでは、あるアイスクリーム店で最も売れているフレーバーのリストを含む文字列があると仮定します。
この文字列は以下のようになっています。
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
データは文字列として格納されています(引用符で囲まれています)。
「Cookies and Cream」がリストのどこにあるのかを知りたいとしましょう。このフレーバーがどれほど人気なのかを詳しく調べたいのです。そこで、組み込み関数であるfind()を使用できます。コードは以下のようになります。
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
cookies_and_cream = flavors.find("Cookies and Cream")
print(cookies_and_cream)
このコードを実行すると、25が出力されます。
まず、「flavors」というPython変数を宣言します。この変数には、アイスクリーム店で人気のフレーバーリストが格納されています。
次に、find()メソッドを使ってリスト内の「Cookies and Cream」を検索し、その戻り値を「cookies_and_cream」変数に代入しています。
コードが返した値は25です。これは「Cookies and Cream」がリストのインデックス位置25から始まることを意味します。
例2:特定のインデックスから検索を開始する
次に、「Cookies and Cream」より後に「Choc Chip」が含まれているかどうかを確認したいとします。「Cookies and Cream」がインデックス位置25から始まることはすでにわかっているので、それ以降の位置で「Choc Chip」を検索します。
その場合、次のようなコードになります。
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
choc_chip = flavors.find("Choc Chip", 25)
print(choc_chip)
このコードは55を返します。find()を使って「flavors」文字列から「Choc Chip」を検索し、第2引数として25を指定することで、検索の開始位置を指定しています。
「Choc Chip」は「Cookies and Cream」より後に現れるため、正の値が返されました。この値が「Choc Chip」がリスト内に現れるインデックス位置です。
例3:特定の範囲内で検索する
今度は、「Buttered Pecan」が「Cookies and Cream」より前に現れるかどうかを調べたいとします。「Cookies and Cream」がインデックス位置25から始まることはわかっているので、それ以降は検索対象外とします。この検索には次のコードを使います。
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
buttered_pecan = flavors.find("Buttered Pecan", 0, 25)
print(buttered_pecan)
このコードは9を返します。この例では、find()を使って文字列から「Buttered Pecan」を検索しました。検索開始位置として0、終了位置として25を指定しています。
「Buttered Pecan」は「Cookies and Cream」より前に現れるため、正の値が返されました。この値は文字列内での「Buttered Pecan」のインデックス位置です。
Pythonのfind()とindex()の違い
Pythonのfind()メソッドとindex()メソッドは、どちらも文字列内の値のインデックス位置を返します。
ただし、index()と異なり、find()は値が見つからない場合に例外を発生させません。代わりに-1を返します。つまり、値が見つからなかった場合の処理を、try-exceptによるエラーハンドリングなしでシンプルに実装できるのです。
まとめ
Pythonのfind()メソッドを使うと、文字列の中から部分文字列を検索できます。index()メソッドと似ていますが、index()は値が見つからない場合に例外を発生させるのに対し、find()は-1を返します。
この記事では、具体的な例を挙げながら、文字列インデックスの基本とPythonのfind()メソッドの使い方を解説しました。これで、あなたもfind()を使ってプロのように文字列内の部分文字列を検索できるはずです!
-
Pythonのcasefold()メソッドとは?文字列の小文字変換と比較方法を解説
Pythonのcasefold()は、文字列内の英字をすべて小文字に変換するためのメソッドです。lower()と似ていますが、より積極的な変換を行う点が特徴で、ドイツ語の「ß」が「ss」に変換されるなど、国際化対応において強力な働きをします。2つの文字列に対してcasefold()を適用すれば、大文字・小文字の違いを無視して値を一致させることができます。そのため、ユーザー入力の比較や検索処理などで非常に役立ちます。casefold()の基本的な使い方次の例では、文字列にcasefold()を適用し、すべて小文字に変換された結果を出力しています。コード例string = BestTutorial
-
Pythonで文字列内のミラー文字を検索する方法【初心者向け解説】
ユーザーが入力した文字列と位置(ポジション)が与えられたとき、その位置から文字列の末尾までの文字を、アルファベット順を反転させた「ミラー文字」に変換するプログラムを作成します。この操作では、「a」→「z」、「b」→「y」、「c」→「x」、「d」→「w」のように、アルファベットの最初の文字が最後の文字に対応する形で置き換えを行います。 入力: p = 3 入力文字列 = python 出力: pygslm 上記の例では、3番目の位置以降の文字「t」「h」「o」「n」が、それぞれ逆順のアルファベット「g」「s」「l」「m」に変換されていることがわかります。先頭から指定位置までは元の文字列