:
Pythonは左から右に式を評価します。割り当てを評価する の間に、右側は の左側の前に評価されます。
詳細は、this sectionを参照してください。この行動を利用した脳ティーザーの良い例がありますhere。
これは、=
の右辺が最初に左から右に評価され、次に左から右への割り当てが行われることを意味します。必然的に、角括弧はインサイドアウトで評価されます。 、左側に左側のターゲットへの割り当てはA
の内容を変更
i = 1
A = [3, 4, -1, 1]
A[i], A[A[i] - 1] = A[A[i] - 1], A[i]
= A[A[1] - 1], A[i]
= A[4 - 1], A[i]
= A[3], A[i]
= 1, A[i]
= 1, A[1]
= 1, 4
A[i], A[A[i] - 1] = 1, 4
A[1], A[A[i] - 1] = 1, 4 # A becomes [3, 1, -1, 1]
A[A[1] - 1] = 4
A[1 - 1] = 4
A[0] = 4 # A becomes [4, 1, -1, 1]
た:
i = 1
A = [3, 4, -1, 1]
A[A[i] - 1], A[i] = A[i], A[A[i] - 1]
= A[1], A[A[i] - 1]
= 4, A[A[i] - 1]
= 4, A[A[1] - 1]
= 4, A[4 - 1]
= 4, A[3]
= 4, 1
A[A[i] - 1], A[i] = 4, 1
A[A[1] - 1], A[i] = 4, 1
A[4 - 1], A[i] = 4, 1
A[3], A[i] = 4, 1 # A becomes [3, 4, -1, 4]
A[i] = 1
A[1] = 1 # A becomes [3, 1, -1, 4]
そして、ここでは、第二のだ:段階的にそれを破壊、ここでは最初の例です右側のターゲットの索引付けを変更します。 4
は、A[1]
(4
からに変更)の値に応じて、A[3]
またはA[0]
のいずれかに割り当てられます。
「このような複数の割り当てを1行で行うにはどうすればよいですか?」 - 私はそれを避けるために最善を尽くします。私はこのような動くターゲットに割り当てる必要がある状況は考えられません。
@Prune:そこでの答えは、この質問に現れる課題間の干渉の種類については論じません。 – user2357112
私はちょうどそれを同じ論理シーケンスに分解し、ユーザーの問題を再現しました。要するに、私は同じインタラクションを得ました。 – Prune
@プルーン:私はそうではないと答えたものがありますか?割り当てや評価がLHSにどのようにインタリーブされているか、それがどのように割り当てを互いに干渉させることができるかについては何も言わない。 – user2357112