IndexError: pop index out of range

Python
本ページはプロモーションが含まれています

はじめに

ptyhonでリストへの操作をしているとエラーが発生。
リストはどのプログラムでよく使う&今回のエラーはよく出るものなので、今回メモとして残すことにしました。

エラー&ソース

エラーが発生したのはリストの要素をpopで削除した時に起きた時です。
今回はその時の再現として、簡単なサンプルソースを↓に貼ります。

l = ["1", "2", "3", "4", "5"]
print(len(l))
print(l)

# popで3番目の要素を削除する
l.pop(2)
print(len(l))
print(l)

# popで最後の要素を削除する
l.pop(len(l))
print(len(l))
print(l)

これを実行すると

5
['1', '2', '3', '4', '5']
4
['1', '2', '4', '5']
Traceback (most recent call last):
File "/Users/****/python/idx_error.py", line 11, in <module>
l.pop(len(l))
IndexError: pop index out of range

とエラーになります。

エラーメッセージ「IndexError: pop index out of range」は、

「popしたインデックス(要素)は(リストの)範囲外です」

と言っています。

原因

エラーから想像出来ますが、リストの範囲外を指定しているからです。
サンプルのソースではlenでリストの長さを取得しています。

ただリストのインデックスは0から始まるので、lenの長さを指定してしまうと範囲外をアクセスしたとしてエラーに。

11行目でのリストの値は次になります。
リストの値    :1, 2, 4, 5
インデックス:0, 1, 2, 3
lenの戻り値   :4

len(l)にすると4番目のインデックスとなるのでエラーになったという訳です。
popで末尾を取得するなら「len(l)-1」としないといけません。

ソースを直したものは↓になります。

l = ["1", "2", "3", "4", "5"]
print(len(l))
print(l)

# popで3番目の要素を削除する
l.pop(2)
print(len(l))
print(l)

# popで最後の要素を削除する
l.pop(len(l)-1)
print(len(l))
print(l)

これを実行すると

5
['1', '2', '3', '4', '5']
4
['1', '2', '4', '5']
3
['1', '2', '4']

という風にプログラムが最後まで実行されます。

さいごに

今回はリストをpopで値を取り出す時に発生したエラーについてでした。
リストはインデックスの範囲外をアクセスするとエラーになります。
プログラムでリストにループで値を入れている時なんかに、範囲の指定を間違えてよくこういったエラーが発生したりしますのでこういったメッセージが出たらリストの範囲をまず調べるのが良いかと思います。

この記事がお役に立ったのならば嬉しいです。
最後までお読みいただきありがとうございました。

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました