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

