python - 使用一行多重赋值在列表中交换元素

标签 python list swap in-place multiple-assignment

我正在尝试交换列表中的 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[arr[0]] 值,然后更改 arr[0] 值。 所以换个地方就能解决问题。

arr = [1, 2, 3, 4, 5]
arr[arr[0]] , arr[0] = arr[0] , arr[arr[0]]
print(arr)

[2, 1, 3, 4, 5]

关于python - 使用一行多重赋值在列表中交换元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65757053/

相关文章:

python - 是否可以在 Jupyter Notebook 单元中在显示多个输出和单个输出之间来回切换?

c++ - 使用 std::copy 复制 std::list 并使用 std::list::erase 删除

c - 高效的列表数据结构

c++ - 为什么交换没有完成?

linux - 'cat/proc/swaps' 什么都不返回

python - 理解 Python 交换 : why is a, b = b, a 并不总是等价于 b, a = a, b?

python - Tkinter OOP 按钮导致 AttributeError 我不明白

python - 使用包含下划线的字典替换列表值

php - IF/THEN 的 Python 语法与 PHP 相比

c++ - 关于 C++ STL 列表类方法 erase()