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

for循环列表追加时的索引机制及重复大写字母定位函数问题排查

问题1:在for循环中向列表追加元素时,索引的工作机制是怎样的?

分两种常见遍历场景说明:

  • 直接遍历列表元素(for item in my_list):循环启动时会生成一个基于当前列表状态的迭代器,迭代器只会遍历循环开始时存在的元素。后续向列表追加的新元素不会被当前循环处理,因为迭代器不会随列表长度变化而更新。
  • 通过索引遍历(for i in range(len(my_list))):range(len(my_list))在循环开始时就生成了固定的索引序列,对应循环启动时列表的长度。即使后续追加元素让列表变长,新增的索引也不在这个初始序列里,所以不会被遍历到。
    如果需要遍历新增元素,可改用while循环手动控制索引:
my_list = [1, 2, 3]
i = 0
while i < len(my_list):
    print(my_list[i])
    my_list.append(my_list[i] + 3)
    i += 1

这种写法会每次重新计算列表长度,能遍历到所有追加的元素。

问题2:返回字符串中大写字母位置的函数处理重复字符失效的问题

你的代码失效原因是word.index(i)只会返回字符i在字符串中第一次出现的索引,所以重复的大写字母会被添加同一个索引值。

修正方法是用enumerate()函数,它能同时返回每个字符的索引和字符本身,确保每个位置的索引都是当前字符的正确位置:

def capital_indexes(word):
    cap = []
    for idx, char in enumerate(word):
        if char.isupper():
            cap.append(idx)
    return cap

测试验证:

print(capital_indexes("HelloWorld"))  # 输出 [0, 5]
print(capital_indexes("HoHoHoHo"))    # 输出 [0, 2, 4, 6]

这样就能正确返回所有大写字母的位置了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:15:43