[问题] 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