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

仅反转字符串各字母段且保留数字位置,代码输出不符预期求排查

问题描述

给定字符串如"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:43:15