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

Python遍历列表在大写字母前插入下划线时重复插入的原因

问题产生原因

异常来自两个逻辑漏洞:

  1. for i in range(len(new)) 中的列表长度只在循环启动时计算一次,得到初始固定值,循环会按照初始长度固定执行对应次数,不会随着列表插入元素变长动态调整遍历范围。
  2. 遍历过程中直接在原列表插入元素,会让插入位置之后的所有元素索引整体+1后移:

初始状态下大写字母W在索引5位置

  • i=5时,判断new[5]是大写,在位置5插入_,此时W被挤到索引6位置
  • i=6时,判断new[6]是W(大写),再次在位置6插入_,W被挤到索引7位置
  • 上述逻辑重复触发,直到循环走完固定次数,就会出现多个连续插入的下划线。
修复方案

推荐两种无副作用的实现方式:

方案1:倒序遍历原列表

从列表末尾往开头遍历,此时插入元素只会影响已经遍历过的高位索引,不会打乱还没遍历到的元素位置:

new = ["h", "e", "l", "l", "o", "W", "o", "r", "l", "d"]
for i in range(len(new)-1, -1, -1):
    if new[i].isupper():
        new.insert(i, "_")
print(new)
# 输出:['h', 'e', 'l', 'l', 'o', '_', 'W', 'o', 'r', 'l', 'd']

方案2:构造新列表(最稳妥,无索引问题)

遍历原列表时直接拼接生成新列表,全程不修改正在遍历的原数据,从根源避免索引错乱:

new = ["h", "e", "l", "l", "o", "W", "o", "r", "l", "d"]
result = []
for c in new:
    if c.isupper():
        result.append("_")
    result.append(c)
print(result)
# 输出:['h', 'e', 'l', 'l', 'o', '_', 'W', 'o', 'r', 'l', 'd']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:06:10