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

为什么Python反向遍历的for循环会遗漏列表最后一项?

问题原理解答

Python中range的逻辑是永远不包含终止参数本身,迭代的继续条件根据步长正负区分:

  • 步长为正数时:当前值 < 终止参数 → 继续迭代,否则停止
  • 步长为负数时:当前值 > 终止参数 → 继续迭代,否则停止

原代码问题分析

你的列表t长度为8,索引范围是0~7。原代码使用range(len(t)-1, 0, -1),参数对应为:

  • 起始值:7
  • 终止值:0
  • 步长:-1

按照规则,只有i>0时才会进入迭代,所以i依次取7、6、5、4、3、2、1,刚好漏掉了索引0对应的第一个0元素,因此拼接结果少了开头的0,不符合预期。

终止参数改为-1的生效逻辑

把终止参数改为-1后,迭代条件变为i>-1,i会依次取7、6、5、4、3、2、1、0,覆盖所有索引,就能得到完整的拼接结果。

你的理解验证

你的判断完全正确。步长为-1的场景下,如果你想让迭代包含索引n,就要把终止参数设置为n-1:

  • 要包含索引0 → 终止参数设为0-1=-1
  • 要让迭代到索引1就停止(不包含0)→ 终止参数设为1-1=0,完全匹配你观察到的规律。

更简洁的实现方案

反向遍历拼接字符串不需要手动控制索引,直接用reversed可读性更高:

t = [0, 0, 2, 6, 14, 4, 7, 0]
res = ''.join(str(x) for x in reversed(t))

也可以用列表切片实现逆序:

res = ''.join(str(x) for x in t[::-1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:09:02