Python 3.x Python交换混淆

Python 3.x Python交换混淆,python-3.x,Python 3.x,试试看 arr=[1,2,4,3];i=2 arr[i],arr[arr[i]-1]=arr[arr[i]-1],arr[i] 然后试试看 arr[arr[i]-1],arr[i]=arr[i],arr[arr[i]-1] 我到底错过了什么 这是概念上的错误吗?因为索引有一个在替换过程中计算的数组。对于您的第一个病例,它可以被视为 arr[2], arr[arr[2] - 1] = arr[arr[2] - 1], arr[2] arr[2], arr[arr[2] - 1] = 3, 4

试试看

arr=[1,2,4,3];i=2
arr[i],arr[arr[i]-1]=arr[arr[i]-1],arr[i]
然后试试看

arr[arr[i]-1],arr[i]=arr[i],arr[arr[i]-1]
我到底错过了什么


这是概念上的错误吗?

因为索引有一个在替换过程中计算的数组。对于您的第一个病例,它可以被视为

arr[2], arr[arr[2] - 1] = arr[arr[2] - 1], arr[2]
arr[2], arr[arr[2] - 1] = 3, 4
# So, arr[2] is now 3 and the second equality is not working as you expected
arr[2], arr[3 - 1] = 3, 4
arr[2], arr[2] = 3, 4
但是对于你的第二个案例

arr[arr[2] - 1], arr[2] = arr[2], arr[arr[2] - 1]
arr[4 - 1], arr[2] = 4, 3
arr[3], arr[2] = 4, 3
这给出了正确的结果。可以修改为

arr=[1,2,4,3]
arr2=arr.copy()
i=2
arr[i],arr[arr2[i]-1]=arr[arr2[i]-1],arr[i]
打印(arr)
# [1, 2, 3, 4]
arr=[1,2,4,3]
i=2
arr[arr[i]-1],arr[i]=arr[i],arr[arr[i]-1]
打印(arr)
# [1, 2, 3, 4]

请添加一个问题陈述,解释此代码的作用。