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

Python中如何交换不同长度的子列表?

解决Python中列表子列表交换问题

你的问题出在直接对两个长度不同的切片进行赋值交换时,Python的切片赋值会修改列表的长度和元素位置,导致后续的切片引用偏移,最终出现元素重复和丢失的情况。

正确实现方法

方法1:重新构造列表(推荐)

这种方式简单直观,直接通过列表拼接得到目标结果:

A = [1,2,3,4,5,6]  # Original list
i,k,j,w = [0,2,3,6] # Indexes
# 按目标顺序拼接子列表:交换的后段 + 中间保留部分 + 交换的前段
A = A[j:w] + A[k:j] + A[i:k]
print(A)  # 输出: [4,5,6,3,1,2]

方法2:原地修改列表

如果你需要原地修改原列表(不创建新列表),可以分步操作:

A = [1,2,3,4,5,6]
i,k,j,w = [0,2,3,6]

# 先保存需要交换的两个子列表
sub_front = A[i:k]
sub_back = A[j:w]

# 删除原列表中后段子列表的部分
del A[j:w]
# 将后段子列表替换到前段位置
A[i:k] = sub_back
# 将前段子列表追加到末尾
A.extend(sub_front)

print(A)  # 输出: [4,5,6,3,1,2]

为什么原代码会出错?

原代码执行时,Python会先计算右侧的两个切片值(A[j:w]得到[4,5,6],A[i:k]得到[1,2]),然后依次执行左侧的赋值:

  1. 首先将A[i:k](即A[0:2])替换为[4,5,6],此时列表变为[4,5,6,3,4,5,6](长度从6变为7);
  2. 接着将A[j:w](即A[3:6])替换为[1,2],这会把列表中索引3到5的元素[3,4,5]替换成[1,2],最终得到[4,5,6,1,2,6],也就是你看到的重复6和丢失3的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:46:17