我正在做一些Hackerrank练习,并遇到了关于交换元素的问题。我的问题是关于列表的一般情况,为什么“arr”中的元素在第二个for循环中没有像第一个for循环那样改变?
def minimumSwaps(arr):
arr = [i-1 for i in arr]
ls = []
minimumSwaps = 0
for i, j in enumerate(arr):
print(arr)
if j == arr[j]:
continue
else:
test = arr[i]
arr[i] = arr[j]
arr[j] = test
minimumSwaps += 1
ls.append(arr[i])
print('\n\n')
for i in range(len(ls)):
print(arr)
if i == arr[i]:
continue
else:
test = arr[i]
arr[i] = arr[arr[i]]
arr[arr[i]] = test
minimumSwaps +=1
return minimumSwaps
minimumSwaps([4,3,1,2])
第一个循环的输出是:
[3, 2, 0, 1]
[1, 2, 0, 3]
[1, 0, 2, 3]
[1, 0, 2, 3]
这是我的预期,但第二个循环输出给了我这个:
[1, 0, 2, 3]
[1,0,2,3] <---如果它与第一个循环具有相同的行为,那么它将是[0,1,2,3]
在i==0
迭代中,test = arr[i]
将1分配给test
。
arr[i] = arr[arr[i]]
将0分配给arr[0]
。
arr[arr[i]] = test
将1分回给arr[0]
,而不是arr[1]
,因为此时arr[0]
为0,而不是1。
最终结果:一切都没有改变。