[問題] arry swap

作者: suhang (suhang)   2018-01-06 13:54:39
1)
A = [1, 3, 2]
i = 2
idx = A[i] - 1
A[i], A[idx] = A[idx], A[i]
>>> A = [1, 2, 3]
2)
A = [1, 3, 2]
i = 2
A[i], A[A[i] - 1] = A[A[i] - 1], A[i]
>>> A = [1, 3, 2]
為什麼 1)可以成功地交換 2)不行?
請大家指點迷津 謝謝
作者: handsomeLin (DoGLin)   2018-01-06 14:37:00
把他拆成三步看就很明顯了吧Python的swap我認為只是幫大家省略步驟而已
作者: tedwu2001   2018-01-06 19:15:00
你把i都帶進去就知道為什麼了啊喔,看錯了。抱歉unpacking先對運算式求值:A[i], A[A[i]-1] = 3, 2從左而右賦值:a[i] = 3 ( a=> [1,3,3])a[a[i] - 1] = 2 => a[3 - 1] = 2 ( a => [1, 3, 2])主要就是A[i]變了,然後求值先發生
作者: gmccntzx1 (o.O)   2018-01-06 19:56:00
我把說明弄成影片,參考 https://youtu.be/r-MffpJ5-KE可用dis.dis()看bytecode, 而python執行的順序是由左而右,有求值的動作會先做.所以你可以試試看,改成A[A[i] - 1], A[i] = A[i], A[A[i] - 1]反而可以得到你要的結果.
作者: ilikekotomi (Young)   2018-01-06 21:47:00
感謝樓上兩位 今天下午也想不通
作者: handsomeLin (DoGLin)   2018-01-08 01:20:00
因為你temp一開始就擺錯東西了啊..第一步修改a[i]呢

Links booklink

Contact Us: admin [ a t ] ucptt.com