今天寫程序的時候總是和自己預想的結果不一致,最終定位到這行代碼。
情況如下:
先定義一個list
lis = [4,1,3,1,3,5,5]
設定 i = 0
那么這個語句之后 lis 會變成什么樣
lis[i], lis[lis[i]] = lis[lis[i]], lis[i]
開始我以為 lis[i] = 4
所以 相當於 list[0], list[4] = list[4], list[0]
lis 會變成
[3, 1, 3, 1, 4, 5, 5]
但是!! 結果是這樣
[3, 1, 3, 4, 3, 5, 5]
結果可以看出 lis[i] = lis[lis[i]] 這條成功賦值了
但是 lis[lis[i]] = lis[i] 這里有問題,應該是lis[i]此時已經變成可3 而不是原來的 4了,就是說
前面的賦值影響了它。
那么我們定義 temp = list[i]
lis[i], lis[temp] = lis[temp], lis[i]
結果回歸正常。
所以猜測是 只有當運行到賦值的那條語句時才會計算 lis[i] 這個值,並且,左邊的會比右邊的先賦值,所以才能影響到。
未完待續。。。等我弄明白原理回來補充