在python列表中交换的意外行为

时间:2018-07-05 19:58:32

标签: python-3.x swap

在这里,我想借助索引交换给定列表中的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]

输出符合预期。

那是为什么?

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

2 个答案:

答案 0 :(得分:0)

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

很显然,两个元组都是从左到右并行评估的,并且对LHS元组的第二个元素的评估是在对第一个元素进行更改之后进行的,因此,将第一个元素分配给LHS元组甚至会导致不同的引用是第二个要素。

答案 1 :(得分:0)

Python中的向后索引应指定为-num

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