Last Updated on 2025年7月28日
Pythonでリスト(list)を扱う際に多くの人が遭遇するエラーに IndexError: list index out of range があります。本記事ではこのエラーの意味、原因、そして解決方法を、初心者にもわかりやすく解説します。
目次
エラー内容
Pythonのコードを実行した際、以下のようなエラーが表示されることがあります。
|
1 |
IndexError: list index out of range |
このエラーメッセージは「リストのインデックスが範囲外です」と訳されます。つまり、存在しないインデックスにアクセスしようとした場合に発生します。
原因
IndexError: list index out of range の原因は、主に次のようなケースです。
1. リストの長さを超えたインデックスにアクセスしている
たとえば以下のようなコード:
|
1 2 |
my_list = [10, 20, 30] print(my_list[3]) # IndexError |
Pythonのインデックスは0から始まるため、my_list[3] は存在しません(0〜2の範囲)。
2. 空のリストにアクセスしている
|
1 2 |
empty_list = [] print(empty_list[0]) # IndexError |
要素が何も入っていないリストにインデックスでアクセスすれば当然エラーになります。
3. forループやwhileループで範囲の指定を誤っている
|
1 2 3 |
my_list = [1, 2, 3] for i in range(4): print(my_list[i]) # 最後でIndexError |
このコードでは range(4) により i = 0〜3 までループするため、 i = 3 でエラーが出ます。
4. リストの長さが動的に変化している
プログラムの途中でリストが削除・追加される場合も要注意です。
|
1 2 3 4 |
my_list = [1, 2, 3, 4] for i in range(len(my_list)): my_list.pop() print(my_list[i]) # IndexErrorになる可能性あり |
対処法
上記のような状況に対して、以下のような対策をとることでエラーを防ぐことができます。
1. リストの長さを確認する
|
1 2 3 4 5 6 |
my_list = [10, 20, 30] index = 3 if index < len(my_list): print(my_list[index]) else: print("インデックスが範囲外です") |
2. try-exceptで例外処理をする
安全なコードのために例外処理を使うことも有効です。
|
1 2 3 4 |
try: print(my_list[3]) except IndexError: print("エラー:インデックスが範囲外です") |
3. enumerateやfor-eachを活用する
ループ時にインデックスを意識せずに処理することもできます。
|
1 2 |
for item in my_list: print(item) |
また、インデックスが必要な場合は enumerate を使うと安全です。
|
1 2 |
for i, item in enumerate(my_list): print(i, item) |
4. whileループでの条件を厳密にチェック
|
1 2 3 4 |
i = 0 while i < len(my_list): print(my_list[i]) i += 1 |
補足
Pythonのリストのインデックスは負の値でも使えることをご存じでしょうか?これは末尾からのアクセスを意味します。
|
1 2 |
my_list = [10, 20, 30] print(my_list[-1]) # 30 |
ただし、負のインデックスもリストの範囲を超えると同様に IndexError が発生します。
|
1 |
print(my_list[-4]) # IndexError |
また、二次元リストや入れ子のリストでは、各階層でインデックスを丁寧に確認する必要があります。
|
1 2 |
matrix = [[1, 2], [3, 4]] print(matrix[2][0]) # IndexError |
まとめ
Pythonで IndexError: list index out of range が発生した場合、まずは「リストの長さ」と「アクセスしようとしているインデックス」が合っているかを確認しましょう。リストのサイズは0から数えること、そしてループや動的な操作によってリストの長さが変わる可能性があることにも注意が必要です。
このエラーはPython初学者が最もよく遭遇するエラーのひとつですが、上記のようなポイントを押さえておけば回避は難しくありません。今後の開発にぜひお役立てください。


