2024-09-30 16:21:06 发布
网友
给定一个字符串,我必须反转每个单词,但要保留它们的位置
我试过:
def backward_string_by_word(text): for word in text.split(): text = text.replace(word, word[::-1]) return text
但是如果我有字符串Ciao oaiC,当它尝试反转第二个单词时,它与已经反转的第一个单词相同,所以它再次替换它。我怎样才能避免这种情况
Ciao oaiC
可以在一行加生成器表达式中使用连接:
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)不是此处使用的正确方法:
s.replace(x, y)
它做两件事:
s
x
y
但是你在这里找不到任何东西,因为你已经有了你想要替换的单词。问题是,它每次都从字符串的开头开始搜索x,而不是从您当前所在的位置开始搜索,因此它会查找您已经替换的单词,而不是您下一次要替换的单词
最简单的解决方案是收集列表中的反向单词,然后通过连接所有反向单词从该列表中构建一个新字符串。您可以使用' '.join()连接字符串列表并用空格分隔它们
' '.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())
可以在一行加生成器表达式中使用连接:
拆分字符串会将其转换为列表。您只需将该列表的每个值重新分配到该项的相反位置即可。见下文:
s.replace(x, y)
不是此处使用的正确方法:它做两件事:
s
中查找x
y
但是你在这里找不到任何东西,因为你已经有了你想要替换的单词。问题是,它每次都从字符串的开头开始搜索
x
,而不是从您当前所在的位置开始搜索,因此它会查找您已经替换的单词,而不是您下一次要替换的单词最简单的解决方案是收集列表中的反向单词,然后通过连接所有反向单词从该列表中构建一个新字符串。您可以使用
' '.join()
连接字符串列表并用空格分隔它们如果您已经理解了这一点,还可以通过使用生成器表达式跳过中间列表来更简洁地编写:
相关问题 更多 >
编程相关推荐