Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用同步赋值交换python列表中的元素时出错_Python_Swap - Fatal编程技术网

使用同步赋值交换python列表中的元素时出错

使用同步赋值交换python列表中的元素时出错,python,swap,Python,Swap,我需要交换Python列表中的元素。当我使用一个临时变量来处理交换时,它可以工作,但当我以pythonic风格执行相同的操作时,即a,b=b,a时,它似乎不起作用 假设我们处理的索引是i=1。我正在尝试交换A[I]和A[A[I]处的元素 输入A=[2,3,4,5,6,7,8,9] 预期产出=[2,5,4,3,6,7,8,9] 首先,我尝试了蟒蛇式的方法。没有得到预期的输出 >>> i = 1 >>> A = [2,3,4,5,6,7,8,9] >>

我需要交换Python列表中的元素。当我使用一个临时变量来处理交换时,它可以工作,但当我以pythonic风格执行相同的操作时,即
a,b=b,a
时,它似乎不起作用

假设我们处理的索引是
i=1
。我正在尝试交换
A[I]和A[A[I]
处的元素

输入A=[2,3,4,5,6,7,8,9] 预期产出=[2,5,4,3,6,7,8,9]

首先,我尝试了蟒蛇式的方法。没有得到预期的输出

>>> i = 1
>>> A = [2,3,4,5,6,7,8,9]
>>> A[i], A[A[i]] = A[A[i]], A[i]
>>> A
[2, 5, 4, 5, 6, 3, 8, 9]
非蟒蛇式的方法奏效了

>>> i = 1
>>> B = [2,3,4,5,6,7,8,9]
>>> temp = B[B[i]]
>>> B[B[i]] = B[i]
>>> B[i] = temp
>>> B
[2, 5, 4, 3, 6, 7, 8, 9]

我只想知道为什么会这样,以及何时应该避免使用同时赋值。

这是因为代码是在过程中赋值,而不是在之后赋值,因此如果按相反顺序执行:

A[A[i]], A[i] = A[i], A[A[i]]

第三个元素是固定的,但是第五个元素会出错。

当执行
A[i]=A[A[i]
时,这意味着3(在1个位置上的wiz.)现在是5,那么,
A[A[i]=A[i]
,记住,在这里,LHS上的A[i]已经是5,而在索引5上它是7,因此索引3是未触及的

更改代码,有点像上面的回答中所述

A[A[i]], A[i] = A[i], A[A[i]]
将在保留索引的情况下执行此操作。

可能会重复