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

为何Python中此列表交换方式未产生预期修改效果?

问题解析

先拆解你这段代码的执行逻辑:

arr = [4,3,2,1]
arr[0], arr[arr[0]-1] = arr[arr[0]-1], arr[0]
print(arr)

Python执行多重赋值时,会先把右侧所有表达式的结果计算出来,存入临时元组,再依次给左侧的元素赋值。但这里左侧第二个元素的索引依赖了已经被修改的arr[0],具体步骤如下:

  1. 先计算右侧:arr[arr[0]-1] 等价于 arr[4-1] = arr[3] = 1,arr[0] 是4,所以右侧得到元组 (1,4)。
  2. 赋值左侧第一个元素:arr[0] = 1,此时数组变为 [1,3,2,1]。
  3. 赋值左侧第二个元素:此时计算arr[0]-1得到0,实际是给arr[0]赋值4,数组又变回初始的[4,3,2,1]。

而你用 arr[0], arr[3] = 1,4 能生效,是因为左侧的索引是固定数值3,不会随arr[0]的修改而变化:

  1. 右侧元组为(1,4)。
  2. 先给arr[0]赋值1,数组变为[1,3,2,1]。
  3. 再给arr[3]赋值4,最终得到预期的[1,3,2,4]。

本质问题就是:多重赋值时,若左侧的索引依赖当前列表的元素,会因为前面的赋值改变元素值,导致索引偏移,最终相当于做了无效操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:30:08