Python初心者です。
内包表記、とっても便利ですね。ただ、内包表記の中で多重ループすると頭が混乱してしまうので、ちょっと整理します。
まずは2重ループについて。以下にコード例を貼ります。
gist03b6f1b907bd5c0e8c3bb3bee3657bb1
なるほど。
最初のforがいわゆる外側のループで、次のforが内側のループですね。
これは、2重のループを回して、結果として1つのリストを生成していますね。
次にこちらの2重ループの例。
gist1a66e3010d49cdac474db6f2bc1e8e25
なるほど。この順番だと、最初のforが内側のループで、次のforが外側になるんですね。
要は、
[A for y in range(1, 10)]
で、Aに別の内包表記(この場合は[x * y for x in 'aaa'])がきてるんですね。と考えると理解できる。
じゃあ、最初の例の
[a + str(i) for i in range(4) for a in 'abc']
はどう理解すればいいのでしょうか。
for i in range(4)
for a in 'abc'
a + str(i)
と理解すればいいみたいです。ふむ。。
後置ifならぬ、後置forだと考えれば納得行きそうです。
では、内包表記をネストしつつ、その中で複数ループをしてみます。
gistae6aee8b0679ffc751e899806ddab1ed
まったく実用性のない処理ですが、上記の例は、2つのループをもつ内包表記を3つネストさせています。
そして、すべての文字が一致したときのみ、リストに格納します。
結果はこのとおり!
ここで大切なのは、外側の内包表記のループの要素は、内側の内包表記で参照可能だということですね。
一番外側の内包表記で定義?したz1とz2は一番内側の内包表記で使用可能です。
内包表記×多重ループ、それとなく分かって来ました。
参考文献