質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

2285閲覧

IndexError: list index out of range について配列が存在していないのか

langhtorn

総合スコア105

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2020/10/15 16:05

###問題点
以下のようなエラーがでました。list index outof rangeは存在しないリストを指定しているときに出てくると思います。この場合iは0~nPまでの配列の添え字を表しているのですがallFamilyA[i]は存在していないのでしょうか。
なぜこのエラーが出てくるのか教えてください。
###エラー

Traceback (most recent call last): File "kadai04x.py", line 19, in <module> allfamilyA[i]+=familyA #全familyA(総支給額)の合計を求める IndexError: list index out of range

###コード

python

1P=[int(i) for i in input().split()] #収入額 2N=[int(i) for i in input().split()] #家族の人数 3B=int(input()) #予算額 4A=1 #ボーナス額仮定 5allfamilyA=[] 6allfamilyAkarioki=[] 7ansA=[] 8nP=len(P) 9#全員のボーナス額を求める(1~) 10while A<1000: 11 print("A=",A) 12 for i in range(0,nP): 13 print(i) 14 if (P[i]+A)>1000: 15 familyA=1000-P[i] #ひと家族のボーナス支給額 16 else: 17 familyA=A*N[i] #ひと家族のボーナス支給額 18 allfamilyA[i]+=familyA #全familyA(総支給額)の合計を求める 19 allfamilyAkarioki[i]+=familyA #ソートしてないほうをおいておく 20 ansA=A #そのときのボーナス額 21 A+=1 22allfamilyA.sort() #ソートする 23n=len(allfamilyA) 24print("n=",n) 25#二分探索 26left=0 27right=n 28while (right-left)==1: 29 center=(left+right)//2 30 print(left,center,right) 31 if allfamilyA[center]==B: 32 ans=center 33 break 34 elif allfamilyA[center]>B: 35 right=center 36 else: 37 left=center 38ansi=right 39print(ansi) 40#print(allfamilyA[ansi]) 41for i in range(0,n): 42 if allfamilyA[ansi]==allfamilyAkarioki[i]: 43 print("あ") 44 ii=i 45 break

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

glyzinieh

2020/10/15 17:29

回答は出てしまっているので、少しだけ。 http://pythontutor.com/visualize.html#mode=edit というサイトを使うと、そのコードで何が起きているかを確認することができます。 そうすることで、何が原因かを特定しやすくなり、自分で調べることができるようになるのでおすすめです。
meg_

2020/10/15 22:48

エラーが発生したときにはデバッグしましょう。
langhtorn

2020/10/16 05:15

@glyziniehさん 有力な情報をありがとうございます。早速使ってみます。
guest

回答2

0

ベストアンサー

最初にallfamilyA=[]と定義しており、なおかつ今回のエラーが出たところまで、この変数に対する操作がされていません。

つまり、この時点で allfamilyAは空の配列のままです
よって、添字としてどんなインデックスキーを入れようがIndexError: list index out of rangeになります。

Pythonでlistに新規に何かを追加するのが目的ならappendを使うと良いです。

diff

1while A<1000: 2 print("A=",A) 3 for i in range(0,nP): 4 print(i) 5 if (P[i]+A)>1000: 6 familyA=1000-P[i] #ひと家族のボーナス支給額 7 else: 8 familyA=A*N[i] #ひと家族のボーナス支給額 9- allfamilyA[i]+=familyA #全familyA(総支給額)の合計を求める 10- allfamilyAkarioki[i]+=familyA #ソートしてないほうをおいておく 11+ allfamilyA.append(familyA) 12+ allfamilyAkarioki.append(familyA) #ソートしてないほうをおいておく 13 ansA=A #そのときのボーナス額 14 A+=1

投稿2020/10/15 16:24

attakei

総合スコア2740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

langhtorn

2020/10/16 07:28

listへの追加の仕方をありがとうございます。参考にさせていただきます。
guest

0

allfamilyAはもともと空のリストなので、空の状態から+=演算子を使っているからエラーになっています。

下図のような状態になっています。
イメージ説明

投稿2020/10/15 16:27

編集2020/10/15 16:35
takutakuya

総合スコア979

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

langhtorn

2020/10/16 07:29

ありがとうございます。気を付けます。
takutakuya

2020/10/16 07:31

がんばってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問