→ handsomeLin: 把他拆成三步看就很明顯了吧 01/06 14:37
→ handsomeLin: Python的swap我認為只是幫大家省略步驟而已 01/06 14:41
試了一下
temp = A[ A[i] - 1]
A[ A[i] - 1] = A[i]
A[i] = temp
這樣子可以成功地交換
那為什麼寫成一行 A[i], A[A[i] - 1] = A[A[i] - 1], A[i] 卻沒辦法?
※ 編輯: suhang (172.89.32.145), 01/06/2018 16:40:16
→ tedwu2001: 你把i都帶進去就知道為什麼了啊 01/06 19:15
→ tedwu2001: 喔,看錯了。抱歉 01/06 19:21
→ tedwu2001: unpacking先對運算式求值:A[i], A[A[i]-1] = 3, 2 01/06 19:35
→ tedwu2001: 從左而右賦值:a[i] = 3 ( a=> [1,3,3]) 01/06 19:38
→ tedwu2001: a[a[i] - 1] = 2 => a[3 - 1] = 2 ( a => [1, 3, 2]) 01/06 19:38
→ tedwu2001: 主要就是A[i]變了,然後求值先發生 01/06 19:39
→ gmccntzx1: 可用dis.dis()看bytecode, 而python執行的順序是由左而 01/06 19:58
→ gmccntzx1: 右,有求值的動作會先做. 01/06 19:59
→ gmccntzx1: 所以你可以試試看,改成 01/06 20:00
→ gmccntzx1: A[A[i] - 1], A[i] = A[i], A[A[i] - 1] 01/06 20:00
→ gmccntzx1: 反而可以得到你要的結果. 01/06 20:00
推 ilikekotomi: 感謝樓上兩位 今天下午也想不通 01/06 21:47
推 handsomeLin: 因為你temp一開始就擺錯東西了啊..第一步修改a[i]呢 01/08 01:20