2017-01-04 12 views
-1

明瞭にするために編集:コンテナ内のアイテムを交換する -

なぜリストアイテムがスワップしないのですか?

# python 3.5 
lst = [0, 1] 
lookup = {0: 1, 1: 0} 

lst[0], lst[lookup[lst[0]]] = lst[lookup[lst[0]]], lst[0] 
# lst is still unchanged; why aren't items 0 and 1 not swapped 
+0

これは、Python 3.5で正常に動作します:

lst[0], lst[lookup[lst[0]]] = lst[lookup[lst[0]]], lst[0] 

と等価です。どうしたの? –

+0

http://stackoverflow.com/questions/8725673/multiple-assignment-and-evaluation-order-in-python –

+0

@VasiliSyrakis申し訳ありませんが、わかりやすくするために書き換えました。 – max

答えて

1

rhsはlhsの前に評価されます。それは問題ではありません。

問題は、lhsの評価方法です。この文を実行することによって自分自身にこれを証明することができます

lst[0], lst[lookup[lst[0]]] = 1, 0 

lst[0]への割り当てがlst[lookup[lst[0]]]前に評価を発生していること。その複雑な式のlst[0]は、新しいの値であり、古い値ではありません。

それを破壊:

lst[0], lst[lookup[lst[0]]] = 1, 0 
=> lst[0] = 1; lst[lookup[lst[0]]] = 0 
=> lst[0] = 1; lst[lookup[1]] = 0 
=> lst[0] = 1; lst[0] = 0 

を最終的な結果はそのまま表示されます。

+0

ああ、右の笑。明確に考えなかった。 – max

0

ので:

lst[0]= lst[lookup[lst[0]]] 
lst[lookup[lst[0]]] = lst[0] 
関連する問題