まず結論
IndexError は、リストにない番号を取り出そうとしたときに出ます。
items = ["りんご", "バナナ", "みかん"]
print(items[3])
このリストにある番号は、0、1、2 までです。
そのため、items[3] は取り出せません。
こんなときに読む記事です
次のようなエラーで止まった人向けです。
IndexError: list index out of range
意味は「リストの範囲にない番号を使っています」に近いです。
絵で見るなら
リストを、番号つきの棚として見ると分かりやすいです。
棚には 0、1、2 の場所があります。
でも 3 の場所はありません。
モコが 3 の番号札を持って棚を探しているけれど、棚がそこまで続いていないイメージです。
個数と番号はずれる
3個の値があるリストでも、最後の番号は 2 です。
0番目: りんご
1番目: バナナ
2番目: みかん
人間の感覚では「3個あるなら3まで」と思いやすいので、ここでつまずきます。
Pythonでは、最初を 0 として数えます。
番号を直す
最後の値を取りたいなら、今回は [2] を使います。
items = ["りんご", "バナナ", "みかん"]
print(items[2])
これで "みかん" が取り出せます。
len()と一緒に見る
len() はリストの個数を返します。
items = ["りんご", "バナナ", "みかん"]
print(len(items))
結果は 3 です。
ただし、最後の番号は 3 ではなく 2 です。
よくある勘違い
len(items) が 3 だからといって、items[3] が使えるわけではありません。
リストの番号は0から始まるため、最後の番号は「個数より1小さい」と考えます。
3個なら最後は2。
5個なら最後は4です。
読み方のコツ
IndexError が出たら、次のように見ます。
指定した番号は、リストの中にある?
リストの個数と、指定した番号を見比べると原因を見つけやすいです。
手を動かすミニ練習
[] の中の番号を変えて、どこまで取り出せるか確認しましょう。
items = ["りんご", "バナナ", "みかん"]
print(items[0])
print(items[1])
print(items[2])
次に items[3] へ変えると、範囲の外だと分かります。
3行まとめ
- IndexErrorは、リストにない番号を取り出そうとしたときに出る。
- 3個のリストで使える番号は0、1、2。
- エラー文が出たら、リストの個数と指定した番号を見比べる。