python 列表中的意外交换行为

The unexpected behaviour of swapping in python list

这里我想通过索引交换给定列表中的 4 和 2,因此我编写了以下代码。

>>>arr = [4,3,1,2]
>>> arr[0] , arr[arr[0]-1] = arr[arr[0]-1] ,arr[0]
>>> arr
[2, 4, 1, 2]

如您所见,以上代码给出了意外的输出。预期输出为 [2,3,1,4].

但是当我写成

>>>arr = [4,3,1,2]
>>>index = arr[0] - 1
>>>arr[0] , arr[index] = arr[index] ,arr[0]
>>>arr
[2, 3, 1, 4]

输出符合预期。

这是为什么?

编辑: 是的,还有其他方法可以交换第一个和最后一个元素。我不得不选择这种方法,然后我遇到了这种异常行为。我还没有找到任何解释

arr[0], arr[-1] = arr[-1], arr[0]

?

显然,两个元组是从左到右并行求值的,LHS 元组的第二个元素的求值顺序是在第一个元素发生变化之后,因此将第一个元素分配给 LHS 元组甚至会导致不同的引用是它的第二个元素。

Python 中的后向索引应为 -num:

>>> arr = [4,3,1,2]
>>> arr[0] , arr[-1] = arr[-1] ,arr[0]
>>> arr
[2, 3, 1, 4]