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
相关产品推荐
相关产品推荐

