【发布时间】:2021-04-21 17:16:18
【问题描述】:
我正在尝试交换列表中的 2 个元素。我想将索引 0 处的元素交换为索引 arr[0] 处的元素,所以基本上我想交换 arr[0] arr[arr[0]]。
我一直使用这种方法在索引 i 和 j 之间交换元素:
arr[i], arr[j] = arr[j], arr[i]
但在这种情况下它似乎不起作用。如果我这样做:
arr = [1, 2, 3, 4, 5]
arr[0], arr[arr[0]] = arr[arr[0]], arr[0]
print(arr)
[2, 2, 1, 4, 5]
但我希望:
arr = [1, 2, 3, 4, 5]
tmp = arr[arr[0]]
arr[arr[0]] = arr[0]
arr[0] = tmp
print(arr)
[2, 1, 3, 4, 5]
谁能解释这种行为?
【问题讨论】:
-
赋值右边的元组首先被求值(从左到右),然后从左到右一个接一个地赋值给左边的元组元素。 "arr[0]" 首先获取它的新值,所以只需交换每个元组中的顺序。
-
现在说得通了。我不知道这就是它的执行方式。我认为两者都被同时分配。当我在两个元素 i 和 j 之间进行定期交换时,我没有注意到差异。
标签: python list swap in-place multiple-assignment