python3,如何反转一个单词中每个单词的字母

时间:2016-05-11 08:46:23

标签: python python-3.x

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']

但是单词之间没有空格。

3 个答案:

答案 0 :(得分:4)

使用split获取字词然后循环并reverse每个字,然后join

addNews

答案 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)

要解决的重要事项是:

  1. 简单地调用" ".join(c)而不在某个地方使用它并没有帮助。 cx的副本,并且撤消它不会更改x
  2. " ".join(c)无论如何都是错误的,因为你不想在字母之间留一个空格,所以它现在是"".join(c)。这些空格被添加到实际的反向句子中。
  3. 第二个:

    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())