gpt4 book ai didi

Python 就地交换

转载 作者:行者123 更新时间:2023-12-02 02:19:58 25 4
gpt4 key购买 nike

以下代码块不起作用。

a = [2,1,3]
i = 1
a[i], a[a[i]-1] = a[a[i]-1], a[i]

然而事实确实如此。

a = [2,1,3]
i = 1
j = a[i]-1
a[i], a[j] = a[j], a[i]

有人知道吗?

最佳答案

等号的左侧从左到右分配,并且每个项仅在达到时才进行评估。这意味着:

a[i], a[a[i]-1] = a[a[i]-1], a[i]

相当于:

tmp = a[a[i]-1], a[i]
a[i] = tmp[0] # Changes a[i]
a[a[i]-1] = tmp[1] # USES new a[i] to determine assignment index!!!

这清楚地表明对 a[i] 的赋值完成,然后 a[i]new 值用于计算第二个作业的索引。

您的工作代码可以正常工作,因为它缓存了 a[i]值,因此重新分配 a[i] 不会改变第二个值去哪里;那里的等效代码清楚地表明了这一点:

j = a[i]-1           # Caches old a[i]
tmp = a[j], a[i]
a[i] = tmp[0] # Changes a[i]
a[j] = tmp[1] # Changes using original a[i] as intended

关于Python 就地交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66575751/

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