我想将第一个元素(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]
答案 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]