[[(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 の条件が満たされる場合のみ)。

したがって、この内包表記は次の手順で計算されます:

  1. 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 のときにもタプルが生成されます。
  2. 次に y が 1 のとき、内部のforループが実行され、 x が 0, 2, 4, 6, 8 の値を取ります。
    • x に対して、(y, x*x) のタプルが生成されますが、今回の y は 1 なので、タプルの最初の要素は 1 になります。
  3. 最後に y が 2 のとき、内部のforループが実行され、 x が 0, 2, 4, 6, 8 の値を取ります。
    • x に対して、(y, x*x) のタプルが生成されますが、今回の y は 2 なので、タプルの最初の要素は 2 になります。

したがって、この内包表記の計算の順序は、外側のforループが最初に実行され、その後で内部のforループが実行されます。そして、条件式が真の場合に式が評価され、生成されたタプルがリストに追加されます。

未分類

Posted by ぼっち