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

为何用list_[-1]作为循环变量时,Python列表遍历结果异常?

Python for循环执行逻辑解析:遍历列表时修改列表元素的异常情况

原代码

list_ = [1, 2, 3, 4]
sum_ = 0
for list_[-1] in list_:
    print(list_[-1])
    sum_ += list_[-1]
print("sum: ", sum_)

实际输出

1
2
3
3
sum: 9

执行逻辑拆解

Python的for循环本质是遍历可迭代对象的元素,每次将当前元素赋值给循环变量。这里的循环变量不是普通变量,而是list_[-1]——也就是列表的最后一个元素,这会导致循环过程中持续修改原列表的最后一位,进而干扰迭代流程,具体步骤如下:

  1. 初始状态:list_ = [1,2,3,4],sum_ = 0
  2. 第一次循环:
    • 取列表第一个元素1,赋值给list_[-1],列表变为[1,2,3,1]
    • 打印list_[-1]的值1,sum_更新为0+1=1
  3. 第二次循环:
    • 取列表第二个元素2,赋值给list_[-1],列表变为[1,2,3,2]
    • 打印list_[-1]的值2,sum_更新为1+2=3
  4. 第三次循环:
    • 取列表第三个元素3,赋值给list_[-1],列表变为[1,2,3,3]
    • 打印list_[-1]的值3,sum_更新为3+3=6
  5. 第四次循环:
    • 此时列表长度仍为4,继续取第四个元素——也就是刚修改后的3,赋值给list_[-1](列表保持[1,2,3,3]不变)
    • 打印list_[-1]的值3,sum_更新为6+3=9

循环结束后,输出最终的sum: 9。

核心问题总结

循环变量使用list_[-1]相当于在迭代过程中持续修改原列表的元素,原本列表的最后一个元素4在第一次循环时就被覆盖成了1,后续每次循环都会把当前迭代到的值覆盖最后一位,导致第四次迭代时取到的是修改后的3,而非初始的4,最终求和结果偏离预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:55:19