Python实现字符串指定字符按所在索引重复的代码问题
问题分析与解决方案
原代码存在的问题
- 字符串不可变:Python中字符串是不可变对象,无法直接通过
s1[index] = ...修改指定位置的字符,运行时会触发报错。 - 条件判断逻辑错误:
s2 in range(len(s1))完全不成立——s2是目标字符,而range()生成的是数字序列,两者类型不匹配,导致修改逻辑从未执行。 - 未正确匹配目标字符:代码没有判断当前字符是否等于目标字符
s2,错误地将字符与索引范围做比较。
实现需求的正确代码
要实现「将选中字符按其所在索引值重复」的需求,直接遍历字符串的每个字符和对应索引,处理后拼接成新字符串即可:
def word(s1, s2): processed = [] for idx, char in enumerate(s1): if char == s2: # 目标字符重复对应索引次数,索引为0时重复0次(即删除该字符) processed.append(char * idx) else: processed.append(char) return ''.join(processed) print(word("aratehadb", "a")) # 输出: raatehaaaaaadb
代码解释
- 使用
enumerate(s1)同时获取每个字符的索引和字符本身,无需手动维护索引变量。 - 当字符等于目标字符
s2时,将其重复idx次(索引0时重复0次,等价于删除该字符);非目标字符直接保留。 - 最后用
''.join(processed)将处理后的字符列表拼接成最终字符串,规避了字符串不可变带来的修改限制。
另一种基于索引定位的实现
如果你想沿用之前用列表推导式查找目标字符位置的思路,需要倒序遍历索引(避免修改字符串长度后影响后续索引的准确性),代码如下:
def word(s1, s2): s_list = list(s1) # 倒序遍历目标字符的索引,防止修改后索引偏移 for idx in reversed([i for i in range(len(s1)) if s1.startswith(s2, i)]): s_list[idx] = s_list[idx] * idx return ''.join(s_list) print(word("aratehadb", "a")) # 输出: raatehaaaaaadb
内容的提问来源于stack exchange,提问作者TobbeTrollkarl
相关产品推荐
相关产品推荐

