如何反转句子中单词的每个字母[重复]

问题描述 投票:0回答:3
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']

但是单词之间没有空格。

python python-3.x
3个回答
4
投票

使用

split
获取单词,然后循环并 反转 每个单词,然后
join
它们。

>>> s = "I love you"
>>> " ".join(word[::-1] for word in s.split())
'I evol uoy'

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)
    而不在某处使用它是没有帮助的。
    c
    x
    的副本,反转它不会改变
    x
  2. 无论如何,
  3. " ".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
只接受一个参数。不过现在我们已经深入了,不用太担心。

最后,可以简单地使用Python的切片表示法将

reverse_word(word)
替换为
word[s::-1]
,一切都可以一步完成,这就是AKS给出的解决方案。


0
投票

将字符串拆分为单词,反转每个单词,然后将它们连接起来。

' '.join(i[::-1] for i in s.split())
© www.soinside.com 2019 - 2024. All rights reserved.