HZK
@HZK (Ritoku Sakamae)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Python: forループでアンパックを使用した場合の出力

解決したいこと

Pythonで、forループを二重に使ってタプルを作成しようとした際に、以下のようになりました。

#1と#2が、逆なのは当然ですが、
#3において、iとjをアンパックを使って入れ替えたら、不思議な結果となりました。
#3も#2と同じになると想定していましたが、1 0, 2 1, 3 2, 4 3と、不思議な数列が繰り返し出力されています。
もしかしたら、基本的過ぎる質問なのかもしれませんが、この理由について教えて頂けたら嬉しいです。
よろしくお願いします。

該当するソースコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#1
for i in range(5):
    for j in range(5):
        print(i, j, end=", ")
#2
for i in range(5):
    for j in range(5):
        print(j, i, end=", ")
#3
for i in range(5):
    for j in range(5):
        i, j = j, i
        print(i, j, end=", ")

出力結果

0 0, 0 1, 0 2, 0 3, 0 4, 1 0, 1 1, 1 2, 1 3, 1 4, 2 0, 2 1, 2 2, 2 3, 2 4, 3 0, 3 1, 3 2, 3 3, 3 4, 4 0, 4 1, 4 2, 4 3, 4 4,
0 0, 1 0, 2 0, 3 0, 4 0, 0 1, 1 1, 2 1, 3 1, 4 1, 0 2, 1 2, 2 2, 3 2, 4 2, 0 3, 1 3, 2 3, 3 3, 4 3, 0 4, 1 4, 2 4, 3 4, 4 4,
0 0, 1 0, 2 1, 3 2, 4 3, 0 1, 1 0, 2 1, 3 2, 4 3, 0 2, 1 0, 2 1, 3 2, 4 3, 0 3, 1 0, 2 1, 3 2, 4 3, 0 4, 1 0, 2 1, 3 2, 4 3,

0

2Answer

以下のような流れになっているため、#2とは異なる出力となります。

■1ループ目
i=0, j=0
i, j = j, i
i=0, j=0

■2ループ目
i=0, j=1
i, j = j, i
i=1, j=0

■3ループ目
※jは内側のforループにより値が更新されますが、iはこの時点では更新されない
i=1, j=2
i, j = j, i
i=2, j=1

■4ループ目
i=2, j=3
i, j = j, i
i=3, j=2

■5ループ目
i=3, j=4
i, j = j, i
i=4, j=3

■6ループ目
※ここで初めてiが更新される
i=1, j=0
i, j = j, i
i=0, j=1

1Like

ありがとうございます。
変数に格納された数値が残っている場合があるのと、ループの順で新たに変数に数字が格納される場合の組み合わせで、数字が変化することが理解できました。
もやもやしていたので、スッキリしました。感謝します。

0Like

Your answer might help someone💌