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

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

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

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

Q&A

解決済

2回答

934閲覧

forのループの際の出力結果がなぜそうなるのかがわからない

GuMasi

総合スコア73

Python 3.x

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

0グッド

0クリップ

投稿2020/01/21 07:37

編集2020/01/21 07:50

forのループについてなのですが、例えば下記のようなコードがありました場合なぜこのような出力結果になるのかがわからず...
ご教示いただけますと助かります。

python3

1fruits = ['apple', 'banana', 'grape', 'orange'] 2 3for fruit in fruits: 4 for fruitlist ,fruitlists in enumerate( fruit,1) : 5 print(fruitlist,fruitlists) 6 7

ターミナル出力結果:

lw:python-izm wl$ python3 list.py
1 a
2 p
3 p
4 l
5 e
1 b
2 a
3 n
4 a
5 n
6 a
1 g
2 r
3 a
4 p
5 e
1 o
2 r
3 a
4 n
5 g
6 e

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

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

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

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

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

y_waiwai

2020/01/21 07:43

どの部分がわからないんでしょうか
GuMasi

2020/01/21 07:45

コメントいただきましてありがとうございます。 一行で一文字ずつ表示されるとかがわかりません。
y_waiwai

2020/01/21 07:47

fruitsにはなにがはいってるんでしょうか。
GuMasi

2020/01/21 07:51

申し訳ありません。 リストの記述し忘れていました。 先ほど質問欄を修正させていただきました。
guest

回答2

0

初学者はデバッグ環境整えて、ステップ実行しながら、変数の変化を追うと学習効率が高まりますよ。整えてみては?

体験版w
http://pythontutor.com

投稿2020/01/21 23:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

GuMasi

2020/01/22 05:42

回答していただきましてありがとうございます。 >初学者はデバッグ環境整えて、ステップ実行しながら、変数の変化を追うと学習効率が高まりますよ。 >>ありがとうございます。 整えてみます。
guest

0

ベストアンサー

まず、for fruit in fruits: の行でリストから一つの値を取り出します。
1週目は apple です。
次に enumerate(fruit, 1) によって、各フルーツを一文字ずつ分割してさらに数字との組にします。
以下は1週目のその時の状態をリスト化したものです。

[(1, 'a'), (2, 'p'), (3, 'p'), (4, 'l'), (5, 'e')]

ここから2回目のfor文によって、数字を fruitlist に、文字を fruitlists に格納しています。
それを出力しているので、1文字ずつ出力されます。

投稿2020/01/21 07:59

nerianighthawk

総合スコア544

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

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

GuMasi

2020/01/21 09:05

回答いただきましてありがとうございます。 > まず、for fruit in fruits: の行でリストから一つの値を取り出します。 1週目は apple です。 >>私一周目でリストの要素全てを取り出しているのかと誤認識おりました。 > 次に enumerate(fruit, 1) によって、各フルーツを一文字ずつ分割してさらに数字との組にします >>そうしますと最初の一行目のfor fruitのfruitはリストの要素が代入されておりenumerate関数は文字列を一行に一文字ずつ表示されるための関数ということでよろしいでしょうか?
shiracamus

2020/01/21 09:35

リストを渡せば1要素ずつ 文字列を渡せば1文字ずつ >>> list(enumerate(['a', 'b', 'c'])) [(0, 'a'), (1, 'b'), (2, 'c')] >>> list(enumerate("abc")) [(0, 'a'), (1, 'b'), (2, 'c')] forでも同じ動作になりますよ。 >>> [x for x in ['a', 'b', 'c']] ['a', 'b', 'c'] >>> [x for x in "abc"] ['a', 'b', 'c']
nerianighthawk

2020/01/21 23:15

enumerate関数は文字列を一行に一文字ずつ表示されるための関数ということでよろしいでしょうか? すみません、説明の仕方が悪かったです。この認識は違います。 enumerateはリストに対して番号を付ける関数です。 enumerateの引数はリストとして扱われます。 そして、Pythonでは文字列をリストとして扱った場合は文字のリストという扱いになるので、こういう結果になっています。
GuMasi

2020/01/22 05:57

shiracamusさんコメントありがとうございます。 多くの例をご提示いただきましてありがとうございます。 助かりました。
GuMasi

2020/01/22 06:04

>nerianighthawkさん >enumerateはリストに対して番号を付ける関数です。 enumerateの引数はリストとして扱われます。 >>そうなのですね、ありがとうございます。 とても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問