为什么在下面的代码中交换奇数个变量列表时,6 会消失?
In [1]: A = [3, 8, 9, 7, 6]
In [2]: A[:2], A[2:] = A[2:], A[:2]
In [3]: A
Out[3]: [9, 7, 3, 8]
In [4]: B = [3, 8, 9, 7, 6]
In [5]: B[2:] + B[:2]
Out[5]: [9, 7, 6, 3, 8]
In [6]: C = [3, 8, 9, 7]
In [7]: C[:2], C[2:] = C[2:], C[:2]
In [8]: C
Out[8]: [9, 7, 3, 8]
最佳答案
A[:2], A[2:] = A[2:], A[:2]
有效解决:
# A = [3, 8, 9, 7, 6]
tmp1 = A[2:] # tmp1 = [9, 7, 6]
tmp2 = A[:2] # tmp2 = [3, 8]
A[:2] = tmp1 # A = [9, 7, 6, 9, 7, 6]
A[2:] = tmp2 # A = [9, 7, 3, 8]
列表切片很奇怪,较大的切片可以替换较小切片中的所有元素,从而扩展列表。同样,较小的切片可以替换较大的切片,从而删除以前存在的元素。
这就是这里发生的情况 - 求值顺序中,A[:2]
在 A[2:]
之前得到完全求值,这意味着对 的赋值>A[2:]
最终覆盖 A[:2]
插入的值之一。
对于这种情况,最好使用串联而不是多重赋值,就像在示例中使用列表 B
一样。
关于python - 为什么交换奇数个变量列表时变量会消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63938831/