pythonに限らず、プログラミングでよく目にするインデックスエラー「IndexError: list index out of range」について、原因と対処法をご紹介します。
プログラミングに慣れていないうちは、このエラーをよく見かけるかと思います。
エラーが出る原因と対処法さえ学び、慣れてしまえば怖くないエラーです!
原因
このエラーは、リストのサイズを超えたインデックスの要素を参照しようとした時に発生します。
例えばサイズが3のリストからインデックス5の要素を抜き出そうとした時に発生するエラーです。
具体的には以下のような状況です。
>>> arr = [0,1,2] # 大きさが3のリスト >>> arr[2] # インデックスが2なら問題なし 2 >>> arr[5] # インデックスが5は存在しない Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
このエラーは、特にプログラミングを始めたばかりの方がインデックスが0始まりであることをうっかり忘れて発生させがちです。
サイズが3のリストであれば最大のインデックスが2となることに気をつけましょう。
対処法
リストサイズ以上のインデックスを指定したことが原因のため、発生しないようにするためにはリストサイズを確認することが重要です。
pythonでリストサイズを確認するときは、以下のようにlen()を用います。
>>> arr = [0,1,2] >>> len(arr) # サイズを確認 3
ここで注意しなければならないのが、サイズが3のリストの最後の要素のインデックスが「2」であることです。
慣れるまでは常にインデックスが0始まりであることを意識しましょう。
また、複雑なコードになればなるほど、リストのサイズが思い出せなくなりますので、こまめにサイズを確認するようにしましょう。
ちなみに、リストの一番後ろの要素を引き抜く場合には、以下のように書くことも可能です。
>>> arr = [0,1,2] >>> arr[-1] # 後ろから1番目の要素を引き抜く 2
タプルでも同様
リストと同様にインデックスを持つ「タプル」でも、サイズを超えた値を指定することで同様のエラーが発生します。
>>> tp = (0,1,2) # タプルの生成 >>> len(tp) # タプルサイズの確認 3 >>> tp[2] # サイズ3の最後のインデックスは2 2 >>> tp[3] # はみ出たインデックスを指定 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: tuple index out of range
上のコードでは、サイズが3のタプルを生成し、サイズを確認した上でサイズに収まる要素と、サイズからはみ出た要素を引き抜こうとしています。
サイズからはみ出た要素にアクセスすることで、リストの時と似た「IndexError: tuple index out of range」というエラーが発生していることがわかります。
もちろんリストと同様、最後の要素は[-1]によって引き抜くことができます。
>>> tp = (0,1,2) >>> tp[-1] 2
プログラミングに慣れてしまえばなんてことないエラーですが、最初のうちは戸惑いますよね。
一つ一つエラーに慣れて、「つよい」プログラマーになりましょう!