列表中的python交换项

列表中的python交换项,python,arrays,Python,Arrays,我手头有一项任务,需要通过重复交换两个项目,对长度为0~n-1且不重复的n列表进行排序 我想继续与索引为arr[0](即arr[0]])的项目交换arr[0],直到arr[0]=0,然后通过arr[n-1]重复对arr[1]执行相同操作 例如,如果列表是arr=[1,2,0,4,3],我首先将arr[0]与arr[0](即arr[1]),获得[2,1,0,4,3],然后再次将arr[0]与arr[0]交换,(这次是arr[2]),获得[1,3]使用arr[4],获得最终结果[0,1,2,3,4]

我手头有一项任务,需要通过重复交换两个项目,对长度为0~n-1且不重复的
n
列表进行排序

我想继续与索引为
arr[0]
(即
arr[0]]
)的项目交换
arr[0]
,直到
arr[0]=0
,然后通过
arr[n-1]
重复对
arr[1]
执行相同操作

例如,如果列表是
arr=[1,2,0,4,3]
,我首先将
arr[0]
arr[0]
(即
arr[1]
),获得
[2,1,0,4,3]
,然后再次将
arr[0]
arr[0]
交换,(这次是
arr[2]
),获得
[1,3]
使用
arr[4]
,获得最终结果
[0,1,2,3,4]

代码如下:

while i < len(arr) - 1:
    while arr[i] != i:
        arr[i], arr[arr[i]] = arr[arr[i]], arr[i] # not working
        arr[arr[i]], arr[i] = arr[i], arr[arr[i]] # working

    i += 1
而i
问题是当我做
arr[i],arr[arr[i]=arr[arr[i]],arr[i]
时,它不起作用(它只会使
arr[i]=arr[arr[i]

按相反顺序交换(即,
arr[arr[i]],arr[i]=arr[i],arr[arr[i]]
)有效


任何人都可以解释背景中发生了什么,为什么第一个案例不起作用?谢谢。

这是因为元组中的项是从左到右计算的


如果您执行
arr[i],arr[arr[i]]=arr[arr[i]],arr[i]
操作,那么
arr[i]
首先会被分配到一个新值,这样
arr[i]
中的索引
arr[i]
将不再是语句开头的相同值。如果顺序相反,那么这个问题就不存在了,因为
arr[arr[i]]
首先被分配了一个新值。

为什么不使用
arr[i],arr[-i]=arr[-i],arr[i]
?这将确保您同时从前面和后面访问列表。当您说“它不工作”时,我们不知道您的意思。您是否收到错误消息?它有什么用吗?它是否做了超出你预期的事情?最好发布一个实际的代码示例来说明您的确切问题。如果
max(arr)>=len(arr)
,会发生什么情况?和@Cut7er的可能重复不是我想要做的。请参见编辑后的说明。谢谢。所以,
arr[i]=arr[arr[i]
arr[arr[i]]=arr[i]
并不是完全独立的。Python首先计算
arr[i]=arr[arr[i]
,这会影响
arr[arr[i]]=arr[i]
,第二个计算的是谁。我理解对了吗?