🟩 Python学習記録 #8|find() と index() を深く理解する

Code

今日は Python の文字列検索でよく使う
find()index() の使い方 を集中的に学びました。

どちらも「文字列の位置を調べる」ためのメソッドですが、
実際に使ってみると 動きの違いが大きく、役割も違う ことを実感しました。

特に、

  • 見つからない場合の挙動
  • 複数回登場する場合の探し方
  • 例外処理の必要性
    このあたりを体で覚えた回になりました。

■ find() と index() の違い

まず最初に感じたのは、見つからない場合の動きの違いです。

● find()

text = "abcde"
print(text.find('x'))

結果:-1
→ 見つからないと -1 を返すので、安全に使える。


● index()

text = "abcde"
print(text.index('x'))

結果:エラー(ValueError)
→ 見つからないと例外を出すため、エラーハンドリングが必要。


この違いは用途によって大きく変わります。
「とりあえず検索したいだけ」なら find()
「絶対に存在することが前提」なら index()
という使い分けが必要になります。


■ 2回目以降の位置を find() で探す

次に学んだのは 繰り返し検索

find() は一番最初の一致しか返さないため、
2回目・3回目を探すには 検索開始位置をずらす 工夫が必要です。

text = "あいううえおうあい"

first = text.find('う')
second = text.find('う', first + 1)

print(second)

出力結果:

3

このように、最初の位置を使って「次から」検索をすることで、
複数回出現する文字を順番に探せます。


■ find() を繰り返して、すべての位置を取得する

問題7では "banana" の中にある "na" の位置をすべて取得しました。

text = "banana"

pos = text.find("na")
while pos != -1:
    print(pos)
    pos = text.find("na", pos + 1)

出力結果:

1
3

繰り返し検索の基本パターンで、
この書き方は文章検索やログ分析などでもそのまま使える実践的なテクニックです。


■ 複数の単語を繰り返し検索する

今日一番の理解が深まったのがこの部分です。

1つの文章から、
「Python」と「code」 の位置をすべて取得しました。

text = "Python makes coding fun because Python code is readable."

# Python の位置
pos = text.find('Python')
while pos != -1:
    print(pos)
    pos = text.find('Python', pos + 1)

# code の位置
pos = text.find('code')
while pos != -1:
    print(pos)
    pos = text.find('code', pos + 1)

出力結果:

0
29
36
  • “Python” → 0, 29
  • “code” → 36

文章中に複数登場する単語を正確に拾うには、
find() の繰り返しパターンが最適だと実感しました。


■ index() を安全に使うには、例外処理が必須

index() は見つからないとエラーを出すため、
そのまま使うとプログラムが止まってしまいます。

対策として、例外処理を学びました。

text = "abcdefg"

try:
    pos = text.index('x')
    print(pos)
except ValueError:
    print("xは見つかりませんでした")

結果:

xは見つかりませんでした

実務でもよく使う書き方のため、確実に身につけたいポイントです。


■ 今日のまとめ

  • find() は見つからないと -1index()エラー
  • 2回目以降の検索には「検索開始位置」をずらす
  • 文章中の複数単語を探す時は while find() が便利
  • index() を使うときは例外処理が必須
  • 文字列検索の理解が深まり、より実践的なコードが書けるようになった

今日の学習を通して、
「find と index の役割の違い」「繰り返し検索の書き方」 が一気にクリアになりました。

次回は、
split() や replace() などの文字列操作 に進むか、
リスト操作 を深めていく予定です。

X(Twitter)はこちら
https://run-ride-code.com/

コメント

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