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

按指定N值分组反转字符实现编解码,如何优化Python代码

原有代码问题梳理
  • 分组数计算错误:分组总数应为商 + (1 if 余数>0 else 0),你现有逻辑是商加余数,会导致循环次数远大于实际分组数,触发索引越界
  • 字符读取逻辑硬编码:j=2仅适配n=3的场景,更换n参数就会失效,且每次循环的起始位置计算错误,没有按n步长跳转分组
  • 重复反转操作:你先倒序读取字符存入group,又将group再次反转,两次反转后等同于原顺序,完全抵消了分组反转的效果
  • 索引越界风险:没有判断剩余字符长度不足n的场景,直接读取n个字符会报错
简洁Python实现

直接利用Python切片特性即可快速实现,代码如下:

def encode_word(word: str, n: int) -> str:
    result = []
    # 按步长n遍历单词,每次取一组字符
    for i in range(0, len(word), n):
        # 截取当前分组并反转,加入结果列表
        current_group = word[i:i+n]
        result.append(current_group[::-1])
    # 拼接所有分组得到最终结果,需要分组空格可改为' '.join(result)
    return ''.join(result)

# 测试用例
print(encode_word("Language", 2)) # 输出aLgnaueg,符合预期
print(encode_word("Language", 3)) # 输出naLaugeg,分组带空格的版本为naL aug eg
print(encode_word("abcabcab", 3)) # 输出cbacbaba,符合预期
原有逻辑优化方案

如果要保留你原来的循环实现思路,可以修改为如下版本:

n = 3
word = "Language"
new_word = ""
length = len(word)
# 正确计算分组数
divisions = length // n
residue = length % n
general = divisions + (1 if residue > 0 else 0)

for i in range(general):
    group = ""
    # 计算当前分组的起始位置
    start = i * n
    # 确定当前分组实际长度,避免越界
    end = min(start + n, length)
    # 读取当前分组的所有字符
    for j in range(start, end):
        group += word[j]
    # 反转分组后拼接到结果
    new_word += group[::-1]

print(new_word)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:48:02