You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中不同长度子数组执行a,b=b,a交换不符合预期的原因

切片交换出现重复元素的原因及解决方法

先看你的代码:

nums = [1, 2, 3, 4, 5, 6, 7]
nums[0:4], nums[4:] = nums[4:], nums[0:4]
print(nums)  # [5, 6, 7, 5, 1, 2, 3, 4]

问题出在哪?

Python的多重赋值确实会先计算等号右侧的所有值并缓存,但左侧的切片赋值是按顺序执行的,前一次切片赋值会改变列表的长度和元素位置,直接影响后一次的切片范围。

具体执行步骤:

  1. 先计算右侧两个切片的值并保存:nums[4:]是[5,6,7],nums[0:4]是[1,2,3,4],这两个值不会被后续修改影响。
  2. 执行第一个赋值:nums[0:4] = [5,6,7]。原列表前4个元素被替换成3个元素,此时列表变成[5,6,7,5,6,7](整体长度从7变为6)。
  3. 执行第二个赋值:nums[4:] = [1,2,3,4]。此时的列表是[5,6,7,5,6,7],nums[4:]指索引4开始的[6,7],把这部分替换成[1,2,3,4]后,最终列表就成了[5,6,7,5,1,2,3,4]——这就是重复5的由来。

正确的做法

要实现两个切片的顺序交换,应该一次性覆盖整个列表,避免中间修改干扰切片位置:

nums = [1, 2, 3, 4, 5, 6, 7]
nums[:] = nums[4:] + nums[:4]
print(nums)  # [5, 6, 7, 1, 2, 3, 4]

或者先把两个切片的值存到临时变量,再重新赋值:

nums = [1, 2, 3, 4, 5, 6, 7]
left = nums[:4]
right = nums[4:]
nums[:] = right + left

内容的提问来源于stack exchange,提问作者Jadeyyy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:46:01