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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

367閲覧

python3の標準入力から取得したリストのiterationについて

shogiOtakku

総合スコア123

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/03/22 18:26

初めての質問になります。ご無礼なことあるかもしれませんが何卒よろしくお願います。

前提・実現したいこと

python3での実装です。       
2つの数列

a1 a2 a3 ... b1 b2 b3 ...

に対してそれぞれの組み合わせの和を出力したいとします。
この時、次の実装で出力を試みましたが意図した出力になりませんでした。

python3

1a_list = map(int, input().split()) 2b_list = map(int, input().split()) 3 4res = 0 5 6for a in list(a_list): 7 print("a: {}".format(a)) 8 for b in list(b_list): 9 print("b:{}".format(b)) 10 print("a:{} b:{} a+b:{}".format(a, b, a + b)) 11

input

1 2 3 4

outout

a:1 b:3 a:1 b:3 a+b:4 b:4 a:1 b:4 a+b:5 a:2

expected

a:1 b:3 a:1 b:3 a+b:4 b:4 a:1 b:4 a+b:5 a:2 b:3 a:2 b:3 a+b:5 b:4 a:2 b:4 a+b:6

aのfor文の中でbのfor文が何度も繰り返し行われると思っていたのですが
1度しか現れない理由がわかりません。

どなたか教えていただければと思います。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

b_listジェネレータなので、一度走りきると以降値を返しません。
外側のループの存在によって、list(b_list)が二回実行されていることが問題です。

Python

1>>> gen = map(int, ['1', '2', '3']) 2>>> print(list(gen)) 3[1, 2, 3] 4>>> print(list(gen)) 5[]

入力時にあらかじめリストとして受け取れば良いかと思います。

Python

1a_list = list(map(int, input().split())) 2b_list = list(map(int, input().split()))

あるいは、リスト内包表記を使っても良いです。(個人的にはこちらが好み)

Python

1a_list = [int(e) for e in input().split()] 2b_list = [int(e) for e in input().split()]

なお、要素の全ての組み合わせ(直積)を取る場合、itertools.productが便利です。

投稿2018/03/22 18:36

編集2018/03/22 18:42
LouiS0616

総合スコア35660

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

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

shogiOtakku

2018/03/22 18:43

早い回答ありがとうございます! なるほど、ジェネレータは一度しか値を返さないんですね。。。 ベストアンサーとさせていただきますm(__)m
LouiS0616

2018/03/22 18:46

そう言えば。競プロっぽい問題ですが、出典はどちらでしょうか。 サイトによっては禁止されている場合もあるので、質問には前以て出典を書いておくと良いです。
shogiOtakku

2018/03/22 18:53

出典を書くべきでしたね。。。すみません、次回から気を付けます。。。 AtCoderの過去問を解いている中で詰まったので質問しました。 https://atcoder.jp/tos ただ今回は直接答えを聞くということでもなく、あくまでもpythonのお勉強という位置づけになります。
LouiS0616

2018/03/22 22:23

AtCoderの過去問ならば問題なさそうですね。リンクもありがとうございます。 悲しいことにごく一部に規約違反をするユーザがいるために、回答側も少し神経質になっているきらいがあるのです。トラブルを未然に防ぐ意味でも出典を明記しておくと良いですね。 勉強頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問