本記事ではPythonの組み込み関数であるfind()を解説します。
find()
find()は指定した文字列(部分文字列)が元の文字列のどこに最初に現れるかを検索し、その開始位置のインデックスを返す関数です。
もし見つからなかった場合は -1
を返します。
基本的な使い方
s = "Hello, world!"
index = s.find("world")
print(index) # 7 ("world" は 7 番目のインデックスから始まる)
not_found_index = s.find("python")
print(not_found_index) # -1 ("python"は見つからないため)
引数
find()
は次のよう引数を指定します。
str.find(sub[, start[, end]])
引数 | 説明 |
---|---|
sub | 検索する文字列 |
start | 検索を開始する位置(省略可能) |
end | 検索を終了する位置(省略可能) |
start を指定する
文字列の 途中から検索を開始したい場合 は start
を指定できます。
s = "Hello, world! Hello again!"
index = s.find("Hello", 8) # 8文字目以降で検索
print(index) # 14 ("Hello again!" の "Hello" が14文字目から始まる)
end を指定する
検索範囲を 限定したい場合 は、start
に加えて end
も指定できます。
s = "Hello, world! Hello again!"
index = s.find("Hello", 0, 12) # 0文字目から12文字目までの範囲で検索
print(index) # 0 (最初の "Hello" が見つかる)
12文字目までの範囲には "Hello again!"
の "Hello"
が含まれていないため、最初の "Hello"
のインデックス 0
が返されます。
rfind() との違い
rfind()
を使うと、最後に現れた位置 を検索できます。
s = "Hello, world! Hello again!"
print(s.find("Hello")) # 0 (最初の "Hello" の位置)
print(s.rfind("Hello")) # 14 (最後の "Hello" の位置)
index() との違い
Pythonには find()
に似た index()
メソッドもありますが、index()
は見つからない場合に ValueError
を発生させる という違いがあります。
s = "Hello, world!"
print(s.find("Python")) # -1 (見つからない場合)
print(s.index("Python")) # エラー発生(ValueError: substring not found)
find()
は -1
を返すので、例外処理なしで検索を実行できる のが利点です
また、rfind()とrindex()もfind()とindex()と同様の関係になっています。
s = "Hello, world!"
print(s.rfind("Python")) # -1 (見つからない場合)
print(s.rindex("Python")) # エラー発生(ValueError: substring not found)
まとめ
find()は文字列の検索においてエラーを発生させず、シンプルに使える便利な関数です。
特に-1を返す特性を活かせば、部分文字列のチェックや条件分岐に役立ちます。