如何避免。替换已替换的单词

2024-09-30 16:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个字符串,我必须反转每个单词,但要保留它们的位置

我试过:

def backward_string_by_word(text):
    for word in text.split():
        text = text.replace(word, word[::-1])        
    return text

但是如果我有字符串Ciao oaiC,当它尝试反转第二个单词时,它与已经反转的第一个单词相同,所以它再次替换它。我怎样才能避免这种情况


Tags: 字符串textinforstringbyreturndef
3条回答

可以在一行加生成器表达式中使用连接:

text = "test abc 123"
text_reversed_words = " ".join(word[::-1] for word in text.split())

拆分字符串会将其转换为列表。您只需将该列表的每个值重新分配到该项的相反位置即可。见下文:

text = "The cat tac in the hat"

def backwards(text):
    split_word = text.split()
    for i in range(len(split_word)):
        split_word[i] = split_word[i][::-1]
    return ' '.join(split_word)

print(backwards(text))

s.replace(x, y)不是此处使用的正确方法:

它做两件事:

  1. s中查找x
  2. 将它替换为y

但是你在这里找不到任何东西,因为你已经有了你想要替换的单词。问题是,它每次都从字符串的开头开始搜索x,而不是从您当前所在的位置开始搜索,因此它会查找您已经替换的单词,而不是您下一次要替换的单词

最简单的解决方案是收集列表中的反向单词,然后通过连接所有反向单词从该列表中构建一个新字符串。您可以使用' '.join()连接字符串列表并用空格分隔它们

def backward_string_by_word(text):
    reversed_words = []
    for word in text.split():
        reversed_words.append(word[::-1])
    return ' '.join(reversed_words)

如果您已经理解了这一点,还可以通过使用生成器表达式跳过中间列表来更简洁地编写:

def backward_string_by_word(text):
    return ' '.join(word[::-1] for word in text.split())

相关问题 更多 >