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

Python使用enumerate移除字符串中√符号时索引异常问题求助

问题分析与解决方案

你的代码问题出在循环中直接修改原字符串,导致enumerate的索引和实际字符串的字符对应不上。当你删除一个√后,原字符串长度缩短,但enumerate是基于循环开始时的初始字符串生成的迭代器,后续遍历的索引会跳过部分字符,最终漏删了一些√。

解决方案1:从后往前遍历索引

这种方法避免了删除字符对后续索引的影响,因为从末尾开始删,前面的字符位置不会被改变:

cal = input(">>> ")
# 从最后一个索引倒序遍历到0
for i in range(len(cal)-1, -1, -1):
    if cal[i] == '√':
        cal = cal[:i] + cal[i+1:]
print(cal)

测试输入123√456√789√123,输出会是123456789123,符合预期。

解决方案2:生成新字符串(同时获取√的索引)

如果你需要记录所有√的原始索引,这种方法更合适,因为不会修改原字符串,遍历完全基于初始内容:

cal = input(">>> ")
new_cal = []
sqrt_indices = []

for idx, char in enumerate(cal):
    if char == '√':
        sqrt_indices.append(idx)
    else:
        new_cal.append(char)

cal = ''.join(new_cal)
print(cal)
print("所有√的原始索引:", sqrt_indices)

运行后不仅能得到干净的字符串,还能拿到初始字符串中每个√的位置,比如输入示例的索引会是[3,7,11]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:40:19