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

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

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

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

Q&A

解決済

2回答

1145閲覧

【行によって長さが違う二次元配列の表示】すべての行の長さと値が不定な 2 次元配列の出力

DaichiNakajima

総合スコア62

Python

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

0グッド

0クリップ

投稿2022/08/19 14:24

編集2022/08/19 15:00

前提

図のような、【行によって長さが違う二次元配列の表示】すべての行の長さと値が不定な 2 次元配列の出力を実装する問題を解いています。

イメージ説明

実現したいこと

以下のエラーが出てしまいます。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "Main.py", line 15, in <module> sum += int(B[counter]) IndexError: list index out of range

該当のソースコード

Python3

1init = input().split(" ") 2N = int(init[0]) 3M = int(init[1]) 4A = input().split(" ") 5B = input().split(" ") 6counter = 0 7sum = int(B[counter]) - 1 8for i in range(N): 9 if i == sum: 10 print(A[i]) 11 counter += 1 12 sum += int(B[counter])✨ここでエラー 13 else: 14 print(A[i], end=" ")

試したこと

このエラーは、Bのインデックスが3までなのにそれ以上の範囲を指定してしまっていることが原因と認識しました。そこで、counterの値を再度チェックしました。しかし、ここでBのインデックスが3を超えることはないように思われます。

補足情報(FW/ツールのバージョンなど)

今はpaizaの環境でテストしています。この環境の違いが原因でしょうか?
よろしくお願いいたします。

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

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

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

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

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

TakaiY

2022/08/19 14:28

エラーの出力は、最後の行だけでなく、Traceback...などのある始めのところから全て貼ってください。 問題の発生箇所の情報などが載っています。(自分でも読むことをお勧めします)
meg_

2022/08/19 14:40

> init = input().split(" ") > A = input().split(" ") > B = input().split(" ") 上記で入力した値は何でしょうか?
DaichiNakajima

2022/08/19 15:02

エラーの画像変更しました。 meg_様、 画像のA, Bと同じになります。
meg_

2022/08/19 15:40 編集

> 画像のA, Bと同じになります。 init についてはどうなっていますか? 出来れば画像ではなくテキストで表示していただきますとコピー出来るので良いです。(ソースコードにコメントの形で入れていただけると分かりやすいかと思います)
guest

回答2

0

ベストアンサー

counterの値をインクリメントした後にBの長さを超えていないかのチェックを追加すると良いかと思います。

Python

1if counter < len(B): 2 sum += int(B[counter])

投稿2022/08/19 16:09

meg_

総合スコア10580

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

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

0

counterの値は超えますね。 「counter += 1」の次の行でcounterの値をprintしてみればわかると思います。

投稿2022/08/19 14:42

TakaiY

総合スコア12747

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

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

DaichiNakajima

2022/08/19 15:04

解答ありがとうございます。 sum += int(B[counter])の直後に、print(counter)を入れた出力結果が以下になります。 1 2 1 3 4 5 6 7 8 2 9 3 10 これをみるとcounterは3を超えていないのですが、、
TakaiY

2022/08/19 15:12

こちらでやるとこうなります。 1 2 1 3 4 5 6 7 8 2 9 3 10 4 この後、例外発生です。 というか、10を出力したあと、必ずcounterをインクリメントしてsumを更新しているので、かならずそうなると思うのですがね。
kazuma-s

2022/08/19 16:03

sum += int(B[counter])の「直後に」ではなく、「直前に」ですね。
TakaiY

2022/08/19 16:15

ああ、それですね。 「counter += 1 の次の行」です。 例外が発生する場所の後では意味がありません。
DaichiNakajima

2022/08/21 00:13

「10を出力したあと、必ずcounterをインクリメントしてsumを更新しているので、かならずそうなると思うのですがね。」 ->問題の核心はこれでした!色々アドバイスありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問