Pythonのリストで「list assignment index out of range」というエラーが出る場合の一例とその解決方法

Pythonで空のリストを作って使う場合のちょっとした初歩的な注意点。エラーメッセージ「list assignment index out of range」の対処法と考え方

今日はプログラミングをゼロから始めたPython初心者が最初につまづきやすい点についての解決方法・考え方についての解説です。

それは、リストを作ったときに、エラー「list assignment index out of range」が出てしまうという場合のものです。

今回はそのある1つの例を解説します。

「list assignment index out of range」というエラーメッセージ

Pythonで新しく空のリストを作って、それを使おうとしたときに、以下のようなエラーメッセージが出ることがあります。

list assignment index out of range

この意味は、乱暴に言ってしまうと「リストの中身の数がおかしいよ」というものです。リストを構成する要素の数にミスがあるというものです。

要素の内容・性質そのものではなく、要素の数ということに注意してください。

たとえば、次のようなコードを書いた場合です。

new_list=[]
new_list[0]='apple'
new_list[1]='orange'

解決方法の解説

空のリストを作る場合の注意点

再び上のコードをそのまま掲載します。

new_list=[]  # ①
new_list[0]='apple'  # ②
new_list[1]='orange'  # ③

これの何がおかしいかわかるでしょうか。

まず最初にnew_listとして要素の数がゼロ個、つまり何も入っていない空のリストを作っています。

リストの要素の数を実際に確かめてみましょう。

len(new_list)  # 結果:0

このようにゼロになります。

では一番上のコードの何がおかしいかわかるでしょうか。

new_list[0]='apple'  # ②

この部分は、new_list[0]に文字列appleを代入しようとしているわけですが、それにはそもそも左辺の「new_list[0]」という情報が存在している必要があります。

new_list[0]は、new_listの「最初の要素を指定」していますね

ところが、new_listはそもそも中身が空っぽであるために、「最初の要素」そのものが存在していないわけです。

実際に、別のリストを作って違いを見てみましょう。

# 上のコードと同じもの
new_list=[]  
len(new_list)  # 結果:0

# 比較用に別のリストone_list(要素は文字列apple)を作ってみる
one_list=['apple']
len(one_list)  # 結果:1
print(one_list[0])  # 結果:apple

いかがでしょう。要素の個数が0と1で異なった結果になっていますよね。

以上より、空のリストは中身が空っぽであるため、そもそも「最初の要素」が存在していないため、「最初の要素を取り出す」とか「最初の要素を変更する」ということがそもそも不可能だとわかります。これは「最初の要素」だろうが「N番目の要素」だろうが同じことです。

こうした理由により、そもそも空っぽのリストの要素を指定して、

new_list[0]='apple'

とすることはエラーとなるのです。指定してもその要素が存在しませんから。

解決方法の例:append( )メソッドを使う

したがって、以下のコードは間違いになります。

fruits_list=['apple', 'orange', 'berry', ]
new_list=[]
for i in range(0,3):
    new_list[i] = fruits_list[i]

new_list[0]という要素を指定しても、それがそもそも存在していないからです。

逆にいえば、空のリストのnew_listについては「要素を指定しなければ良い」ということになります。

そこで、new_listにappend()メソッドを使って「要素を指定してなにかをするのではなく、空のリストそのものに変更を加える」ことを考えます。

fruits_list=['apple', 'orange', 'berry', ]
new_list=[]
for i in range(0,3):
    new_list.append( fruits_list[i] )
print(new_list)  # 結果:['apple', 'orange', 'berry']

上のように空のリストに要素を加えて、「空ではないリスト」にしてから、そのリストの要素を指定してからその後に、

new_list[0] = 'melon'

とすると上手くいきます。

もしみなさんがこれからのプログラミング学習や転職などに悩みがあるならば、現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのも良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。

Webマーケティングコース

Webアプリケーションコース

データサイエンスコース

機械学習の基礎が学べる「Pythonコース」

など各種の講座が用意されていますので、自分の未来に沿った講座が見つかります。無料で体験できるテックアカデミー無料体験も用意されていますのでお得に利用してみてください。

初心者におすすめプログラミングスクール