用語比較
str.find()と index() の違い|見つからないとき -1 か ValueError か(Python3基礎)
文字列の中で部分文字列の位置を調べる方法には、find() と index() があります。見つかったときの結果は同じで、違いは見つからなかったときです。
find() は -1 を返し、index() は ValueError を起こします。
このページは、find() の結果を if に使って逆の分岐になった人や、index() で ValueError が出て困った人向けです。決まりは、Python 公式ドキュメントの組み込み型(文字列メソッド)の項に書かれています。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
s.find(sub)
最初に見つかった位置を返す。見つからなければ -1。
s.index(sub)
最初に見つかった位置を返す。見つからなければ ValueError。
sub in s
あるかどうかだけを True / False で返す。位置は分からない。
違いを表で確認
| 比較軸 | s.find(sub) | s.index(sub) |
|---|---|---|
| 見つかったとき(s = "banana"、sub は "na") | s.find("na"):2 | s.index("na"):2 |
| 見つからないとき(sub は "x") | s.find("x"):-1 | s.index("x"):ValueError: substring not found |
| リストに使えるか | list には find() が無く AttributeError | list にも index() があり、無い値は ValueError |
| 後ろから探す版 | rfind():見つからなければ -1 | rindex():見つからなければ ValueError |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
find() の結果をそのまま if に入れて、逆の分岐になった人
if s.find("x"): と書くと、見つからないときの -1 は 0 以外なので True になります。逆に、先頭で見つかったときの 0 は False になります。Python 3.9.6 では、s = "banana" で bool(s.find("b")) が False、bool(s.find("x")) が True でした。
find() の -1 をそのまま添字に使ってしまった人
見つからない -1 を s[-1] に使うと、エラーにならず末尾の文字が取れます。s = "banana" で s[s.find("x")] は 'a' でした。見つからない場合を先に分ける必要があります。
あるかどうかだけ知りたい人
公式ドキュメントは、find() は位置が必要なときだけ使い、部分文字列があるかどうかの確認には in 演算子を使うよう案内しています。"n" in s は True、"x" in s は False です。
具体例で使い分ける
例 1
見つからないときの find() と index()
s = "banana" に対して s.find("x") と s.index("x") を実行します。
- 公式ドキュメントは、find() を最初に見つかった位置を返し、見つからなければ -1 を返すメソッドと説明しています。
- index() は find() と同じですが、見つからないときに ValueError を起こすと説明されています。
結論: s.find("x") は -1 です。s.index("x") は ValueError: substring not found になります。Python 3.9.6 で同じ結果を確認しました。
例 2
探す範囲を start と end で区切る
s = "banana" に対して s.find("a", 2, 4) と s.find("a", 2, 3) を実行します。
- start と end は、スライスと同じく s[start:end] の範囲を表します。
- s[2:4] は "na"、s[2:3] は "n" です。位置は元の文字列の先頭から数えた値で返ります。
結論: s.find("a", 2, 4) は 3、s.find("a", 2, 3) は -1 です。Python 3.9.6 で同じ結果を確認しました。
問題文から答えを選ぶ手順
- 1
位置が必要かどうかを決める
あるかどうかだけなら in 演算子です。位置が要るときだけ find() か index() を使います。
- 2
見つからないことが普通か、異常かを決める
見つからないのが普通なら find() で -1 を判定します。見つからないのが異常なら index() でエラーとして扱います。
- 3
結果を使う前に -1 を分ける
find() の結果は、-1 かどうかを == や != で比べてから添字や条件に使います。
試験での見分け方
- 1s.find(sub) は見つからないと -1 を返す。
- 2s.index(sub) は見つからないと ValueError を起こす。
- 3あるかどうかだけなら sub in s を使う。
- 4if s.find(sub): は先頭の 0 と未発見の -1 を取り違える。
誤答しやすい選択肢
if s.find(sub): で存在を判定する
修正: 先頭で見つかると 0 で False、見つからないと -1 で True になります。in 演算子か、s.find(sub) != -1 と書きます。
find() の -1 を添字にそのまま使う
修正: s[-1] は末尾の文字なので、エラーにならず誤った値が入ります。-1 かどうかを先に確かめます。
list に find() を使おうとする
修正: list に find() は無く、AttributeError になります。list.index() を使うか、in 演算子で確かめます。
確認問題
Q1s = "banana" のとき、s.find("x") は何ですか?
答え: -1
find() は見つからないと -1 を返します。
Q2s = "banana" のとき、s.index("x") を実行するとどうなりますか?
答え: ValueError
index() は見つからないと ValueError を起こします。
Q3s = "banana" のとき、if s.find("b"): の条件は True ですか、False ですか?
答え: False
"b" は先頭で見つかるので find() は 0 を返し、0 は False として扱われます。
到達チェック
- find() は -1、index() は ValueError と言える
- if s.find(sub): が危ない理由を言える
- 存在確認には in 演算子を使うと言える
- list には find() が無いと言える
関連ページで確認する
同じ資格で次に知りたいこと
- reverse()と reversed() の違い|None が返る理由と逆順の取り方(Python3基礎)
リストの reverse() は元のリストを逆順に並べ替えて None を返し、reversed() は元を変えずに逆順のイテレータを返します。Python 公式ドキュメントの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
- dict.get()と setdefault() の違い|辞書に書き込むかどうか(Python3基礎)
辞書の get() はキーが無いとき辞書を変えずに既定値を返し、setdefault() は既定値を辞書に挿入して返します。Python 公式ドキュメントの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
- capitalize()と title() の違い|they're が They'Re になる理由(Python3基礎)
capitalize() は文字列の先頭の1文字だけを大文字にし、残りを小文字にします。title() は単語ごとに先頭を大文字にしますが、アポストロフィの後ろも大文字にします。Python 公式ドキュメントの規定、Python 3.9.6 での実行結果、確認問題つきで整理します。
よくある質問
Qfind() と index() はどちらを使うべきですか?
見つからないことが普通なら find()、見つからないのは異常として止めたいなら index() です。
Qrfind() と rindex() は何が違いますか?
探す向きが後ろからになる点を除き、見つからないときの扱いは find() と index() に対応します。rfind() は -1、rindex() は ValueError です。
Qどちらが速いですか?
このページでは速度を比べていません。見つからないときの扱いで選びます。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
