【Python】IndexError: list index out of rangeの原因と対策

今回はPythonの配列操作で見かける以下のエラーについてです。

IndexError: list index out of range

なぜ起きて、どのように対処すればよいのでしょうか。

どんなときに起きるのか

IndexError: list index out of rangeは、配列の要素数以上の要素を参照しようとした場合に発生するエラーです。

たとえば以下のような4つの要素を持つ配列liがあったとき、print文でliの5番目(0始まりなので指定は4となる)を指定したとき、本エラーが出ます。

li = [0, 1, 2, 3]

# li[3]は4番目の要素のため存在する
print(li[3])

# li[4]は5番目の要素で存在しない
print(li[4])

>> 3
>> IndexError: list index out of range

対策

IndexError: list index out of rangeを防ぐためには、配列の要素数がいくつなのかを把握したうえで要素の参照をする必要があります。

配列の要素数はlen()にて取得することができます。

len(li)

>> 4

上記の例でエラーを回避するためには、参照したい要素番号と配列の要素数を比較し、配列に存在すれば参照し、配列に存在しない場合はメッセージを出す等ハンドリングを実施する必要があります。

特に、配列の要素の数え方は0始まりです。なので4番目の要素を取得しようとしてli[4]とすると、0,1,2,3,4となって実際は5番目の要素を参照しようとすることになるので、注意してください。

#指定したい要素番号(X番目の要素:1始まり)
index = 4

li = [0, 1, 2, 3]

# 要素番号は0始まりのため、indexは1を足して比較する
if len(li) >= index + 1:
    print(li[4])
else:
    print("配列の要素数は{}です。 要素数以内の数値を指定してください".format(str(len(li))))


>> 配列の要素数は4です。 要素数以内の数値を指定してください

まとめ

IndexError: list index out of rangeの原因と対策について見てきました。

本エラーが出た場合は、参照しようとしている配列の要素数はいくつなのか、参照しようとしているのは何番目の要素なのかという点に注目してデバッグしてください。

特に、配列の要素の数え方は0始まりなので、そこで参照したい要素番号がずれていないかは注意してください。

ではでは👋