【python】IndexError: list index out of rangeの対処方法

python

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

 

プログラミングに慣れてしまえばなんてことないエラーですが、最初のうちは戸惑いますよね。
一つ一つエラーに慣れて、「つよい」プログラマーになりましょう!

python
pickleでエラーならdillで保存する!【Python】

Pythonのpickleを使うと、いろいろなデータを保存出来て便利ですよね。 しかし、ファイルオブ …

python
1
【WP REST API解説】投稿を更新する(POST /posts/id)

Word PressのAPIを用いてすでに投稿されている記事を更新する方法について説明します。 あわ …

python
【対処法】pip install mecab-python3のエラー

久しぶりに自然言語処理の環境を一から作るとき、形態素解析器MeCabのインストールでコケることがよく …