今日はプログラミングをゼロから始めたPython初心者が最初につまづきやすい点についての解決方法・考え方についての解説です。
それは、リストを作ったときに、エラー「list assignment index out of range」が出てしまうという場合のものです。
今回はそのある1つの例を解説します。
Contents
「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'
とすると上手くいきます。
世界最大の動画学習サイトUdemyのおすすめPython講座【PR】
- AWSで作るWEBアプリケーション 実践講座
- 現役シリコンバレーエンジニアが教えるPython
3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
- 独学で身につけるPython〜基礎編〜【業務効率化・自動化で残業を無くそう!】
- 【完全初心者向け】絶対に挫折させないPython入門講座
- 【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門
- はじめてのPython 少しずつ丁寧に学ぶプログラミング言語Python3のエッセンス
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
- 現役シリコンバレーエンジニアが教えるアルゴリズム・データ構造・コーディングテスト入門