Python swap 函数无法使用 list=[1,2,3] 的索引方法

Python swap function is not working using index method with list=[1,2,3]

我正在尝试使用 python 列表索引方法交换元素,该方法将 return 元素索引。 这样我就可以根据需要使用已知元素进行交换。

这是代码...

a = [1,2,3,4,5,6]


a[a.index(1)],a[a.index(2)] = a[a.index(2)],a[a.index(1)]

输出

>>>a
>>>[1,2,3,4,5,6]

我再次尝试使用交换元素,现在这是输出

a = [2,1,3,4,5,6]


a[a.index(1)],a[a.index(2)] = a[a.index(2)],a[a.index(1)]

输出

>>> a
>>> [1,2,3,4,5,6]

输出列表 [1,2,3,4,5,6]

这是因为 Python 的 evaluation order 并且因为您在 中间 的评估中更改了列表:

对于赋值,首先计算 RHS,从左到右:

# a = [1,2,3,4,5,6]
a[a.index(2)], a[a.index(1)] =>  2, 1

现在,从左到右评估 LHS。所以,首先:

# a = [1,2,3,4,5,6]
a[a.index(1)] => a[0] = 2
# now a = [2,2,3,4,5,6]

注意现在 2 的 (first) 索引是 0!!!

下次评价是:

# a = [2,2,3,4,5,6]
a[a.index(2)] => a[0] = 1
# now a = [1,2,3,4,5,6]

所以你最终得到了相同的列表...


这也是因为index()方法returns的:

index of the first occurrence of x in s


对于第二个列表,RHS 的计算结果相同,但在 LHS 处你有:

# a = [2,1,3,4,5,6]
a[a.index(1)] => a[1] = 2
# now a = [2,2,3,4,5,6]

现在:

# a = [2,2,3,4,5,6]
a[a.index(2)] => a[0] = 1
# now a = [1,2,3,4,5,6]

看来还不错...