仅反转字符串各字母段且保留数字位置,代码输出不符预期求排查
问题描述
给定字符串如"test1982pop6005python",需求为仅反转其中的连续字母段,数字部分位置保持不变。编写的Python代码如下:
def rev(string): reversed_letters = (s for s in string[::-1] if s.isalpha()) new = '' for s in string: if s.isalpha(): new += next(reversed_letters) else: new += s return new s = "test1982pop6005python" print(rev(s))
运行后输出为nohtyp1982pop6005tset,但预期输出应为tset1982pop6005nohtyp,请问代码存在什么问题?
问题分析与解决方案
你的代码错误在于把所有字母当成一个整体反转,而非每个连续字母段单独反转。原字符串的字母段是test、pop、python,需要分别反转;但你的逻辑是先把所有字母testpoppython整体反转成nohtyppoptset,再按原字符串的字母位置依次填充,最终导致整个字母段的顺序被颠倒。
要实现每个连续字母段单独反转的需求,可以按以下逻辑修改代码:
- 遍历字符串,收集连续的字母到临时列表
- 遇到数字时,先反转当前收集的字母段并加入结果,再将数字加入结果
- 遍历结束后,处理最后一段可能剩余的字母
- 拼接所有部分得到最终字符串
修正后的代码:
def rev(string): result = [] current_letters = [] for char in string: if char.isalpha(): current_letters.append(char) else: # 反转当前字母段并加入结果 result.append(''.join(reversed(current_letters))) current_letters = [] # 添加数字字符 result.append(char) # 处理字符串末尾的字母段 if current_letters: result.append(''.join(reversed(current_letters))) return ''.join(result) s = "test1982pop6005python" print(rev(s)) # 输出: tset1982pop6005nohtyp
内容的提问来源于stack exchange,提问作者Dip
相关产品推荐
相关产品推荐

