Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Python初心者が最初につまづきやすい場合の1つとして、リストを作って実行したときに、エラー「list assignment index out of range」が出てしまうというものがあります。今回はこのエラーが出る場合の一例と、そのときの解決方法を解説します。
Contents
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'
とすることはエラーとなるのです。指定してもその要素が存在しませんから。
以上のことをふまえると以下のコードは間違いになります。
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などプログラミング学習においては、単に本を読んだりネットで検索してまわるよりも、動画で学習するほうがわかりやすく、効率的です。下の記事では5つの人気講座を紹介してますので参考にして見てください。