AI AIワークナビ AI Work Studio
メニュー
AIワークナビ ホーム

PythonのIndexError: list index out of rangeを直す|リスト範囲外の原因

Pythonのリストから値を取り出したとき、IndexError: list index out of range と表示されることがあります。これは、リストに存在しない番号を指定したことが原因です。この記事では、3要素のリストに番号3を指定する例と、空リストの末尾を取る例を実行し、安全な直し方を確認します。

結論

番号が変わる可能性がある場合は、取り出す前に 0 <= index < len(fruits) を確認します。条件を満たすときだけ fruits[index] を実行すれば、範囲外の番号で停止しません。

fruits = ["りんご", "バナナ", "みかん"]
index = 3

if 0 <= index < len(fruits):
    print(f"選んだ果物: {fruits[index]}")
else:
    print(f"番号{index}の要素はありません")

発生している問題

リストの要素は3個でも、利用できる番号は0、1、2です。次のコードでは4番目の要素を意味する番号3を指定しているため、処理が2行目で止まります。

修正前コード

fruits = ["りんご", "バナナ", "みかん"]
print(fruits[3])

ローカルのPython 3.14.2とAI Work StudioのPython実行画面で、どちらも最後に同じエラーが表示されました。

IndexError: list index out of range

原因

Pythonのリスト番号は0から始まります。fruits[0] は「りんご」、fruits[1] は「バナナ」、fruits[2] は「みかん」です。len(fruits) は3を返しますが、3は要素数であり、最後の番号ではありません。

Python公式ドキュメントでは、IndexError はシーケンスの添字が範囲外のときに発生すると説明されています。また、負の番号は末尾から数えるため、要素があるリストなら fruits[-1] で最後の値を取得できます。

ただし、負の番号なら必ず安全という意味ではありません。空リストには末尾の要素がないため、次のコードも同じIndexErrorになります。

fruits = []
print(fruits[-1])

修正後コード

len() で要素数を取得し、番号が0以上かつ要素数未満かを確認します。今回は番号3が範囲外なので、リストを参照せず案内を表示します。

fruits = ["りんご", "バナナ", "みかん"]
index = 3

if 0 <= index < len(fruits):
    print(f"選んだ果物: {fruits[index]}")
else:
    print(f"番号{index}の要素はありません")

実行結果

index = 3 の結果は次のとおりです。

番号3の要素はありません

index = 1 へ変更すると、範囲内なので次の結果になります。

選んだ果物: バナナ

ローカルとAI Work Studioで修正前、空リスト、修正後の2パターンを実行し、記事のエラー名と出力が一致することを確認しました。Pythonの結果はConsoleに表示され、Previewは表示内容なしでした。標準入力は使わない例なので空欄のままです。

よくある間違い

len(fruits)を最後の番号だと思う

要素数が3なら、最後の番号は2です。最後の番号は len(fruits) - 1 ですが、空リストでは値が-1になるため、実際に参照する前にリストが空でないことも確認します。

負の番号なら空リストでも使えると思う

-1 は「最後の要素」を表しますが、空リストには最後の要素がありません。空になる可能性があるデータでは、要素の有無を先に確認します。

すぐtry/exceptで隠す

IndexErrorを捕まえる方法もありますが、利用者が選んだ番号を扱う処理では、参照前の範囲チェックの方が「どの番号なら使えるか」を読み取りやすくなります。予想できる範囲外は条件分岐で防ぎ、予想外の問題までまとめて隠さないようにします。

AI Work Studioで試す手順

  1. AI Work Studioを開き、Pythonタブを選びます。
  2. 修正前コードを貼り、表示方法をConsoleへ切り替えます。
  3. 「Pythonを実行」を押し、Consoleの最後に IndexError: list index out of range が出ることを確認します。
  4. 修正後コードへ置き換え、index = 3 で実行します。
  5. 番号3の要素はありません を確認したら、index = 1 へ変えて再実行します。
  6. 選んだ果物: バナナ になれば、範囲内と範囲外の両方を確認できています。

まとめ

IndexError: list index out of range は、リストに存在しない番号を参照したときに発生します。番号は0から始まり、利用できる範囲は 0 以上 len(リスト) 未満です。値を取り出す前に範囲を確認し、空リストでは -1 も使えないことを覚えておきましょう。

関連記事