[[(y,x*x) for x in range(10) if x%2==0] for y in range(3)] これの計算の順序がわからない
この内包表記は、2つのforループを含んでいます。外側のforループは range(3) の各要素 y を順番に取り出し、内側のforループは range(10) の各要素 x を順番に取り出します。ただし、x は偶数の場合にのみ内包表記の式が実行されます(if x % 2 == 0 の条件が満たされる場合のみ)。
したがって、この内包表記は次の手順で計算されます:
yが 0 のとき、内部のforループが実行され、xが 0, 2, 4, 6, 8 の値を取ります。xが 0 のとき、(y, x*x)のタプル(0, 0*0)が生成されます。xが 2 のとき、(y, x*x)のタプル(0, 2*2)が生成されます。- 同様に、
xが 4, 6, 8 のときにもタプルが生成されます。
- 次に
yが 1 のとき、内部のforループが実行され、xが 0, 2, 4, 6, 8 の値を取ります。- 各
xに対して、(y, x*x)のタプルが生成されますが、今回のyは 1 なので、タプルの最初の要素は 1 になります。
- 各
- 最後に
yが 2 のとき、内部のforループが実行され、xが 0, 2, 4, 6, 8 の値を取ります。- 各
xに対して、(y, x*x)のタプルが生成されますが、今回のyは 2 なので、タプルの最初の要素は 2 になります。
- 各
したがって、この内包表記の計算の順序は、外側のforループが最初に実行され、その後で内部のforループが実行されます。そして、条件式が真の場合に式が評価され、生成されたタプルがリストに追加されます。

ディスカッション
コメント一覧
まだ、コメントがありません