gpt4 book ai didi

当顺序更改时,Python swap 会导致意外结果

转载 作者:行者123 更新时间:2023-12-05 02:31:06 24 4
gpt4 key购买 nike

Python 支持 1 行 A/B 交换 (A , B = B , A),我们预计 (B, A = A, B) 会导致相同的结果。但是,我在处理列表条目时遇到了一个奇怪的行为。我在下面的代码中简化了我的发现:

nums = [0, 0, 0, 0]
n = 2
print(nums, "expected case")
nums[n - 1], n = n, nums[n - 1]
print(n, nums)

nums = [0, 0, 0, 0]
n = 2
print(nums, "unexpected case")
n, nums[n - 1] = nums[n - 1], n
print(n, nums)

下面是执行上面程序的输出:

[0, 0, 0, 0] expected case
0 [0, 2, 0, 0]
[0, 0, 0, 0] unexpected case
0 [0, 0, 0, 2]

问题:为什么上面的顺序改变会导致不同的结果?似乎在意想不到的情况下,在 nums[-1] 更新之前,n 首先被赋值为 0。

最佳答案

您的假设(A, B = B, AB, A = A, B 是等价的陈述)仅在 A 时为真和 B不要互相依赖。问题在于,在这两种情况下,正确的表达式都是您所期望的,而不是左侧的。在一种情况下,nnums[n-1] 之前分配(到 0) , 所以你实际上访问了 0-1=-1 - 列表的第 n 个案例(这是最后一个,如示例所示)。在另一种情况下,n-1 之前计算 n再次分配,所以 nums[n-1]对应nums[1] .请记住,表达式是从左到右“求值”的,即使在赋值时也是如此。

关于当顺序更改时,Python swap 会导致意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71667227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com