python 2.7 swap的怪异行为

时间:2016-12-08 06:44:04

标签: python python-2.7 list

我想将第一个元素(4)与第三个元素(1)交换为列表[-1,4,3,1],我希望输出为[-1, 1, 3, 4],但为什么输出是[4, 1, 3, 1]

使用Python 2.7。

a=[-1,4,3,1]
i=1
a[i],a[a[i]-1]=a[a[i]-1],a[i]
print a # output [4, 1, 3, 1]
# expect [-1, 1, 3, 4]

2 个答案:

答案 0 :(得分:3)

从左到右依次将值分配给左侧的目标。因此,在将第一个值分配给a[i]后,a[i]的值会更改,并且此新值将用于计算a[a[i]-1]的分配。

答案 1 :(得分:0)

  

在赋值语句中,始终评估右侧   在完成实际的变量赋值之前。

a[i],a[a[i]-1] = a[a[i]-1],a[i] 
# is Equal to
a[i], a[a[i]-1] = 1, 4

从左到右的实际变量分配

a[i], a[a[i]-1] = 1, 4
# is same as
a[i] = 1
a[1-1] = 4 

这就是你得到[4,1,3,1]结果的原因。 有了BrenBarn的解释,你可以做这样的事情

a[a[i]-1], a[i] = a[i], a[a[i]-1] # return [-1, 1, 3, 4]