python - 为什么交换奇数个变量列表时变量会消失?

标签 python python-3.x list

为什么在下面的代码中交换奇数个变量列表时,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/

相关文章:

python - 添加多个停靠的小部件

CSS 继承被破坏?

java - RandomAccessSubList 未序列化

javascript - 通过 jQuery 对选项值进行分组

python - 在验证器文件中导入模型时,Django 中的模型导入错误

从命令行运行时Python不创建文件

python - 操作系统错误: [Errno 22] Invalid argument ( Fails randomly while processing a file)

python - 使用Python读取文件夹中的wav文件

python-3.x - 如何修复 TypeError : G must be a 'd' matrix?

python-3.x - 在seaborn热图中屏蔽注释