【Python】IndexError: list index out of rangeエラーの原因と解決方法

時計 2021.03.07 / 時計

【Python】IndexError: list index out of rangeエラーの原因と解決方法

記事ではPythonで発生する「IndexError: list index out of range」エラーの原因と解決方法について解説していきます。

このIndexErrorはPythonのリストやタプルを扱っているとしばしば発生するエラーです。特にプログラミング初心者の方は遭遇することが多いのではないでしょうか。

IndexError: list index out of rangeエラーは、原因がわかればすぐに解決できるタイプのエラーです。本記事でエラー原因を確認して、すぐにプログラムの修正をしましょう。

本記事を通して以下の知識を学べます。

学べる知識
  • IndexError: list index out of rangeエラーの原因と解決方法
  • エラーを防ぐための知識

IndexErrorについて

IndexError: list index out of rangeエラーの発生原因

Pythonでリストを操作していると以下のエラーが発生することがあります。

発生するエラー

IndexError: list index out of range

IndexError: list index out of rangeエラーが発生する原因は、
リストに対して範囲外のインデックスを指定しているからです。

リストに格納されている要素にはそれぞれインデックスが振られています。リストのインデックスは0から振られているので、要素数-1がインデックスの最大値です。

リストについて詳しく知りたい方は以下記事をご参照ください。

IndexError: list index out of rangeエラーが発生する例

次のようなリストを扱ったコードを例に見てみましょう。

>>> lists = [4, 5, 54]
>>> lists[0]
4

上記プログラムでは、要素を3つ格納したlistsを生成しています。これはインデックス番号0~2の要素を持つリストであるということです。そしてlistのインデックス0の要素にアクセスしています。

それでは次のプログラムはどうでしょうか。

>>> lists = [4, 5, 54]
>>> lists[3]
IndexError: list index out of range

上記コードでは、IndexError: list index out of rangeエラーが発生してしまいました。原因はlists[3]にアクセスし、リストに対して範囲外のインデックスを指定しているからです。

このようなエラーがプログラム実行中に発生するとプログラムは異常終了してしまいます。エラーが発生してもプログラムを停止せずに走らせるためには例外処理を組み込みます。例外処理については以下記事をご参照ください。

対処方法

このエラーが発生しないようにする対処法はただ一つです。
リストの範囲外インデックスを指定しないことです。

ここではIndexErrorを発生させないためのエラーが発生する事例を解説していきます。

リストの要素数の確認:len()メソッド

リストに格納されている要素数を得るためにlen()メソッドが使用されます。よくしてしまうミスとして、リストの末尾要素を取得するためにlen()メソッドを使うことです。

>>> lists = [4, 5, 54]
>>> num = len(lists)
>>> lists[num]
IndexError: list index out of range

len()メソッドで得た値で末尾の要素にアクセスするとIndexErrorが発生してしまいます。なぜならリストのインデックスは0から始まるため、len()メソッドでは末尾のインデックスより1大きいのです。

そのため末尾のインデックスを指定するならば、list[要素数-1]とする必要があります。

>>> lists = [4, 5, 54]
>>> num = len(lists)
>>> lists[num-1]
54

または末尾の要素を取得するならば、len()メソッドを使わずに-1を指定することで簡単に末尾の要素を取得できます。

>>> lists = [4, 5, 54]
>>> lists[-1]
54

タプルでもIndexErrorが発生する

範囲外インデックスを指定することで発生する本エラーは、リストだけでなくタプルでも同様にエラーが発生します。

>>> tp = (4, 5, 54)
>>> tp[3]
IndexError: tuple index out of range

リストでもタプルでも範囲外のインデックスは指定しないように気を付けましょう。

まとめ

本記事「IndexError: list index out of rangeエラーの原因と解決方法」はいかがでしたか。

本サイトOFFICE54では、その他にも様々なエラーの解決方法を解説しています。
ぜひ他の記事もご参考にしてください。