s="I love you"
如何获得"I evol uoy"
?
我试过......
words=s.split()
for x in words:
c=list(x)
c.reverse()
" ".join(c)
我得到......
'I'
'evol'
'uoy'
我再次尝试......
words=s.split()
s1=[]
for x in words:
c=list(x)
c.reverse()
for y in c:
s1.append(y)
现在s1
是:
['I', 'e', 'v', 'o', 'l', 'u', 'o', 'y']
但是单词之间没有空格。
答案 0 :(得分:4)
答案 1 :(得分:2)
以下是解决您的第一个解决方案的方法:
s = "I love you"
words = s.split()
def reverse_word(x):
c = list(x)
c.reverse()
return "".join(c)
result = " ".join(reverse_word(w) for w in words)
print(result)
要解决的重要事项是:
" ".join(c)
而不在某个地方使用它并没有帮助。 c
是x
的副本,并且撤消它不会更改x
。" ".join(c)
无论如何都是错误的,因为你不想在字母之间留一个空格,所以它现在是"".join(c)
。这些空格被添加到实际的反向句子中。第二个:
s1 = []
for x in words:
new_word = []
c = list(x)
c.reverse()
for y in c:
new_word.append(y)
s1.append("".join(new_word))
result = " ".join(s1)
这里的重要区别在于,您需要每个单词(由字母组成)以及整个句子(由单词组成)的列表,因为您看到两个单词列表都不起作用。我保持它与您的代码类似,但new_word
实际上是多余的,因为它只是c
的精确副本。所以它可以简化如下:
s1 = []
for x in words:
c = list(x)
c.reverse()
s1.append("".join(c))
result = " ".join(s1)
这是一种非常常见的模式:创建一个空列表,在for循环的每次迭代中向其附加一些元素,然后保留最终结果。 Python有一个特殊的语法,称为列表推导,这很常见:
def reverse_word(x):
c = list(x)
c.reverse()
return "".join(c)
s1 = [reverse_word(word) for word in words]
这是更优雅的Pythonic方式。实际上你现在已经注意到上面的第一部分代码几乎就是这个,除了我立即使用s1
而没有命名它,并且没有方括号,因为现在它是一个生成器理解和Python语法的一个很好的小特性意味着只有括号是有效的,因为join
只需要一个参数。但是现在我们变得越来越深,不要太担心。
最后reverse_word(word)
可以简单地使用Python的切片表示法替换为word[s::-1]
,一切都可以一步完成,这就是AKS给出的解决方案。< / p>
答案 2 :(得分:0)
将字符串拆分为单词,反转每个单词然后加入它们。
' '.join(i[::-1] for i in s.split())