【发布时间】:2021-09-10 03:08:51
【问题描述】:
众所周知,交换两个项目a和b的值的pythonic方法是
a, b = b, a
应该等价于
b, a = a, b
然而,今天在做一些代码的时候,无意中发现下面两个swap给出了不同的结果:
nums = [1, 2, 4, 3]
i = 2
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
print(nums)
# [1, 2, 4, 3]
nums = [1, 2, 4, 3]
i = 2
nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
print(nums)
# [1, 2, 3, 4]
这让我难以置信。有人可以向我解释这里发生了什么吗?我认为在 Python 交换中,这两个分配同时独立发生。
【问题讨论】:
-
在研究了您的代码 sn-p 之后,我能给出的最佳答案是“不要那样做”。操作顺序是我认为的不同之处,但哇,这令人困惑。
-
@nicomp 这不是一个非常令人满意的答案。我经常发现,了解某事以它的方式运作的原因有助于我在其他相关领域。
-
这就是我添加它作为评论的原因。
-
@Ram 失败的例子是使用交换的数字作为列表的索引。检查答案。
-
“众所周知,交换两个项目 a 和 b 的 Python 方式是”,不,这就是交换 两个变量 的方式。如果您使用复杂的表达式,评估顺序就会发挥作用。
标签: python python-3.x list indexing swap