Python 『find』

Python

今回はPythonの「find」メソッドの使い方を見ていきたいと思います。

具体例を交えて紹介していくので、マスターしていきましょう!

findメソッドとは

そもそも「find」メソッドとはなんでしょうか?

一言で言うと、「文字列の中から特定の文字を探し出し、そのインデックス番号を返す」ということをしてくれます。

ここで重要なのが、「一番最初に見つけたもののインデックス番号」を返します。

どんな場面で使うかというと、「特定の文字が文字列の中の先頭から何番目にあるか」、「特定の文字が文字列の中の最後から何番目にあるか」などが一番わかりやすいです。

paizaのスキルチェックなどで活躍しそうですね。

では早速具体的な使い方を見ていきましょう。

findメソッド

基本的な使い方

基本的な使い方は以下になります。

<探索対象文字列>.find(<探索したい文字>

探索対象文字列」を最初に持ってきて、「探索したい文字」を「find」で囲みます。

具体的な使い方

では具体的な使い方を見ていきましょう。

簡単に確認

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
print("abcdefg".find("a"))
# 0

# 文字列abcdefgから「c」を探索してインデックス番号を返す。
print("abcdefg".find("c"))
# 2

探したい文字」を2文字以上にしたときは、ヒットした部分の一番先頭のインデックス番号を返します。

# 文字列abcdefgから「cd」を探索してインデックス番号を返す。
print("abcdefg".find("cd"))
# 2

# 文字列abcdefgから「de」を探索してインデックス番号を返す。
print("abcdefg".find("de"))
# 3

ではもし「探したい文字」がなかったとき、どんな出力になるでしょうか?

# 文字列abcdefgから「w」を探索してインデックス番号を返す。
print("abcdefg".find("w"))
# -1

-1」が出力されましたね。

探したい文字」がなかった時は、「-1」が返されると覚えておきましょう。

見やすく変更

文字列を直接入れてしまっているので、もう少し見やすくしていきましょう。

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.find("a")
print(index)
# 0

これで見やすくなりましたね。

これ以降はこの状態でいきます。

範囲を指定

探索する範囲を指定することができます。

そのために引数を追加していきましょう。

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.find("c", 2)
print(index)
# 2

コードだけでは理解しにくいと思うので解説していきます。

まずは第2引数に「」と指定することで、「abcdefg」のインデックス番号2番目から探索を開始して、その範囲内に「探したい文字」があれば「文字列の先頭からのインデックス番号」を出力しています。

直感的にはわかりにくいですが、単純に「探索範囲を指定」しているだけだと認識してください。

では今度は「範囲の終わり」もしていしていきましょう。

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.find("c", 2, 5)
print(index)
# 2

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.find("d", 1, 3)
print(index)
# -1

1つ目は範囲内に「探したい文字」があるので、インデックス番号が返されていますが、2つ目は範囲内に「探したい文字」がないので「-1」が返されます。

あれ?2つ目は範囲内じゃないの?」と思った方もいらっしゃると思います。

これはPythonの仕様で、範囲指定の際に「2, 5」と指定したら、「インデックス番号2番目から5番目の手前まで」という指定になります。

終わりは指定した数字を含めないので、覚えておきましょう。

rfindメソッド

今度は「探索対象文字列」の後ろから探索してみましょう。

基本的な使い方

<探索対象文字列>.rfind(<探索したい文字>

find」と全く同じですね。

具体的な使い方

では、具体的な使い方を見ていきましょう。

簡単な確認

まずは簡単な確認をしてきましょう。

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.rfind("a")
print(index)
# 0

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.rfind("d")
print(index)
# 3

find」と出力結果は全く同じですね。

範囲を指定

では次に範囲を指定してみましょう。

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.rfind("c", 2, 5)
print(index)
# 2

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefg"
index = words.rfind("d", 1, 3)
print(index)
# -1

こちらも全く同じですね。

これでは取り上げた意味がないので、違いを確認していきましょう。

findとrfindの違い

では「find」と「rfind」の違いを確認してみましょう。

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefgabcdefg"
index = words.find("d")
print(index)
# 3

# 文字列abcdefgから「a」を探索してインデックス番号を返す。
words = "abcdefgabcdefg"
index = words.rfind("d")
print(index)
# 10

お!今度は出力が変わりましたね。

1つ目は「find」なので、先頭から探索してインデックス番号3番目で見つけていますね。

一方2つ目は「rfind」なので、後ろから探索してインデックス番号10番目で見つけているのが確認できます。

探索開始してから、1番最初に見つけたもののインデックス番号を返すので、直感的にもわかりやすいと思います。

このように「先頭から探索するか」、「最後から探索するか」で使い分けることができるので、自分が求めている方を使いましょう!

最後に

今回はPythonの「find」メソッドの使い方を確認してきました。

最初は使い方で混乱すると思うので、ぜひこの記事を活用してください!

何か質問などがあれば下のTwitterからDMで聞くか、コメントしてください。

それでは!

コメント

タイトルとURLをコピーしました