Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonのリストとエラー

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

Pythonのリストでエラーメッセージ「list assignment index out of range」が出る場合の一例と、その解決方法の解説

Python初心者が最初につまづきやすい場合の1つとして、リストを作って実行したときに、エラー「list assignment index out of range」が出てしまうというものがあります。今回はこのエラーが出る場合の一例と、そのときの解決方法を解説します。

「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'

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

一般論

以上のことは例として空のリストを使った場合のものでしたが、そうした場合だけに限らず一般論としては、Pythonのリストで「list assignment index out of range」というエラーが出た場合は、リストの要素の個数についてしっかりと考えてみることが重要だということです。

Pythonの最も効率的な学習方法について

なおPythonなどプログラミング学習においては、単に本を読んだりネットで検索してまわるよりも、動画で学習するほうがわかりやすく、効率的です。下の記事では5つの人気講座を紹介してますので参考にして見てください。

愛を分かち合いましょう