🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

3回答

652閲覧

python学習にてループ分

hiro.a

総合スコア28

Python

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

0グッド

0クリップ

投稿2021/01/04 11:08

前提・実現したいこと

プログラミング初学者です。Pythonの勉強を始めました。
参考書に基付いてコードを書いたのですが、上記のコードでなぜ以下の結果が出力されるのか知りたいです

[6, 7, 8, 9, 7, 8, 9, 10, 8, 9, 10, 11, 9, 10, 11, 12]

①list1はどこに行ったのか
②リストに入っていない数字が出力されるのか

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

わかってないことがエラー

該当のソースコード

Python

1list1 = [1, 2, 3, 4] 2list2 = [5, 6, 7, 8] 3 4added = [] 5for i in list1: 6 for j in list2: 7 added.append(i + j) 8 print(added)

試したこと

参考書に基づき見直しましたが、わかりませんでした

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

おすすめの学習法などありましたら教えていただきたいです

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

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

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

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

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

takasima20

2021/01/04 11:28

list1 はどこにもいってないし、表示される内容は list1 と list2 の各要素を足し合わせたものになるようコーディングされているようにみえますが? ちなみに、print の位置はたぶん違いますね?
meg_

2021/01/04 11:31 編集

python学習にてループ分 → ループ文 ですか? 参考書に基付いてコードを書いたのですが、上記のコードで → 下記のコード ですか? 「参考書に基づき見直しましたが、わかりませんでした」とのことですが、デバッグされましたか?未だならしましょう。
退会済みユーザー

退会済みユーザー

2021/01/04 12:21

デバッグすればすぐにわかります。 もしデバッグできない環境でpythonのコードを実行しているならすぐにデバッグできる環境を整えましょう。
guest

回答3

0

ベストアンサー

本来、どうあるべきかが、質問文からは分かりかねますが、
記載コードの最終結果として、下記結果となるのは、
addedには、list1とlist2の数値を順に足した結果をappendしているためで、
それをprintした結果だからです。

[6, 7, 8, 9, 7, 8, 9, 10, 8, 9, 10, 11, 9, 10, 11, 12]

python

1list1 = [1, 2, 3, 4] 2list2 = [5, 6, 7, 8] 3 4added = []       # (a) 5for i in list1: # (b) 6 for j in list2: # (c) 7 added.append(i + j) # (d) 8 print(added) # (e)

(a) まず、addedは空のリストが作成されます。
(b) list1の、0番目のindex=数値の1が、iに代入されて、(ひとつ目の(外側の))for文を回します。
(c) list2の、0番目のindex=数値の5が、jに代入されて、(ふたつ目の(内側の))for文を回します。
(d) addedに、i+j(すなわち、1+5)の計算値を、append(追加)します。
このため、addedの最初(0番目のindex)に、数値の6が追加されます。

↓ ...for文が回るため(c)に戻ります。

(c) list2の、1番目のindex=数値の6が、jに代入されて、内側のfor文を回します。
(d) addedに、i+j(すなわち、1+6)の計算値を、appendします。
このため、addedの1番目のindexに、数値の7が追加されます。

※これをlist2の3番目のindex=数値の8まで、あと2回分くりかえします。

(e) 内側のfor文が4回まわると、addedの内容がprintされます。
この時点で、[6, 7, 8, 9]となるはずです。

↓ ...外側のfor文が回るため(b)に戻ります。

(b) list1の、1番目のindex=数値の2が、iに代入されて、外側のfor文を回します。
(c) list2の、0番目のindex=数値の5が、jに代入されて、内側のfor文を回します。
(d) addedに、i+j(すなわち、2+5)の計算値を、append(追加)します。
このため、addedの4番目のindexに、数値の7が追加されます。

↓ ...for文が回るため(c)に戻ります。

(c) list2の、1番目のindex=数値の6が、jに代入されて、内側のfor文を回します。
(d) addedに、i+j(すなわち、2+6)の計算値を、appendします。
このため、addedの5番目のindexに、数値の8が追加されます。

※これをlist2の3番目のindex=数値の8まで、あと2回分くりかえします。

以降、繰り返し

外側のfor文も4回まわり終えたときに、print文で出力されている結果が、
冒頭の結果となります。

質問への回答とするならば、このようになります。

①list1はどこに行ったのか
⇒ 表示されていないだけで、プログラム内で定義された[1, 2, 3, 4]のまま残っています。

②リストに入っていない数字が出力されるのか
⇒ 上述の解説の通りです。

投稿2021/01/04 11:47

_whitecat_22

総合スコア1305

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

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

hiro.a

2021/01/06 03:47

回答ありがとうございます。 改めて考えてみたら自分でも理解でき、人に説明しても理解してもらえました。 ですが、こちらの回答の方がわかりやすかったです
_whitecat_22

2021/01/06 04:01

ありがとうございます。恐縮です。 お役に立てて嬉しく思います。 私もまだまだpythonは学び始めですので、お互いにがんばっていきましょう!
guest

0

for i in list1: という表現は「list1 の中身を順番に i に入れて下のブロックを実行するよ」という意味を持ちます。 list1 = [1, 2, 3, 4] ですから最初 i には 1 が入ります。

次に for j in list2: とでてきますが、今度は「list2 の中身を順番に j に入れて下のブロックを実行するよ」という意味です。list2 = [5, 6, 7, 8] ですから j には最初 5 が入ります。

added は最初空のリストですが、for j in list2: の繰り返しを行う度 appendi + j が追加されていきます。一番最初は i = 1j = 5 ですから 6added に追加されます。

for j in list2: の繰り返しが一番内側ですので j の値を 678 と変えながら append を実行していきます。

list2 をすべて読み終わると list1 の繰り返しがまた始まります。今度は i2 が入ります。そしてまた for j in list2: の繰り返しが最初から行われます。

このような流れで added に数が蓄積されていって、16 個の数が積まれます。その結果を表示すると

Python

1[6, 7, 8, 9, 7, 8, 9, 10, 8, 9, 10, 11, 9, 10, 11, 12]

となります。

質問に答えるなら

list1 は表示されていないだけでまだ残っている
②上述のような流れで新しいリストが作られた

といったところでしょう。

投稿2021/01/04 11:37

A_kirisaki

総合スコア2853

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

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

0

pythonを勉強するには、動かして確かめましょう。

python

1x = 1 2y = 2 3added = x + y 4print(added)

これを実行してみましょう。

python

1>>> x = 1 2>>> y = 2 3>>> added = x + y 4>>> print(added) 53

さて質問です。
①xとyはどこに行ったのか
②変数に入っていない数字が出力されるのか

①を調べるには、次のようにします。

python

1>>> print(x) 21 3>>> print(y) 42

xはちゃんとありました。yもちゃんとあります。

②変数に入っていない数字が出力されるのか
実は、addedは変数です。addedには3が入っていてそれが出力されました。

これと同じことをhiro.aさんのコードでやってみて、分からない点があれば質問を編集して追加の質問をしてください。

投稿2021/01/04 11:28

ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問