如何将句子中单词的首字母替换为下一个单词的首字母?
实现方案
你写for循环出问题的核心原因大概率是直接在原始单词列表上原地修改:等处理到最后一个单词时,第一个单词的首字母已经被替换过了,拿不到最开始的原始首字母,最终结果就会出错。正确的实现逻辑非常简单,按下面的步骤写就行:
- 先把所有单词的原始首字母单独存成一个列表,全程基于这个原始列表取替换用的首字母,不要从修改过程中的单词列表里取
- 遍历单词列表时,每个位置的单词,替换用的首字母取「下一个位置单词的原始首字母」即可,最后一个单词的下一个位置用取模运算自动映射到第一个位置,不用单独写if判断做特殊处理
- 每个新单词用「目标首字母 + 原单词从第二个字符开始的剩余部分」拼接,最后把所有新单词用空格拼回完整句子
完整可运行代码
def rotate_initial_letters(sentence): # 拆分单词为列表,这步你已经实现了 word_list = sentence.split() # 空句子直接返回,避免索引报错 if not word_list: return "" # 提前存储所有单词的原始首字母,这步是避免循环出错的核心 original_initials = [word[0] for word in word_list] word_count = len(word_list) new_word_list = [] for idx in range(word_count): # 计算当前单词要替换的首字母位置,最后一个单词自动取第一个单词的原始首字母 target_initial_pos = (idx + 1) % word_count replaced_initial = original_initials[target_initial_pos] # 拼接新单词:替换后的首字母 + 原单词去掉首字母的剩余部分 word_remaining = word_list[idx][1:] new_word_list.append(replaced_initial + word_remaining) # 拼接回完整句子 return " ".join(new_word_list) # 功能测试 if __name__ == "__main__": test_sentence = "I love coding every day" print(rotate_initial_letters(test_sentence)) # 输出结果:l ove loding cvery Iay
边界情况说明
这个实现可以自动兼容带单字母单词的句子:单字母单词取
[1:]切片时会得到空字符串,替换后直接是目标首字母,不会触发索引越界错误。如果需要处理句子首尾多余空格、多空格间隔的情况,直接用不带参数的split()做单词拆分即可,它默认会自动过滤任意长度的空白间隔。
内容的提问来源于stack exchange,提问作者Sahar
相关产品推荐
相关产品推荐

