列表中的python交换项目

时间:2018-09-02 16:06:14

标签: python arrays

我手头有一项任务,我需要通过重复交换两个项目来排序一个n长度为0〜n-1且没有重复项的列表。

我想继续将arr[0]与索引为arr[0](即arr[arr[0]])的项交换,直到arr[0] = 0,然后重复对{{1} }到arr[1]

例如,如果列表为arr[n-1],我首先将arr=[1,2,0,4,3]arr[0](即arr[arr[0]])交换,得到arr[1],然后交换再次[2,1,0,4,3]arr[0],(这次arr[arr[0]]),得到arr[2],然后与[0,1,2,4,3]交换arr[3],得到最终结果{{ 1}}。

代码如下:

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 )。

以相反的顺序(即arr[i], arr[arr[i]] = arr[arr[i]], arr[i])交换。

任何人都可以解释背景情况,为什么第一种情况不起作用?谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为元组中的项目是从左到右进行评估的。

如果您执行arr[i], arr[arr[i]] = arr[arr[i]], arr[i],则arr[i]将首先被分配一个新值,这样arr[i]中的索引arr[arr[i]]将不再是原来的值。在声明的开头。如果顺序相反,则此问题将不存在,因为arr[arr[i]]首先被分配了一个新值。