Reverse each word in a string
Question:
I am having a small problem in my code. I am trying to reverse the words and the character of a string. For example “the dog ran” would become “ehT god nar”
The code almost works. It just does not add spaces. How would you do that?
def reverseEachWord(str):
reverseWord=""
list=str.split()
for word in list:
word=word[::-1]
reverseWord=reverseWord+word+""
return reverseWord
Answers:
You are on the right track. The main issue is that ""
is an empty string, not a space (and even if you fix this, you probably don’t want a space after the final word).
Here is how you can do this more concisely:
>>> s='The dog ran'
>>> ' '.join(w[::-1] for w in s.split())
'ehT god nar'
def reversed_words(sequence):
return ' '.join(word[::-1] for word in sequence.split())
>>> s = "The dog ran"
>>> reversed_words(s)
... 'ehT god nar'
def reverse_words(sentence):
return " ".join((lambda x : [i[::-1] for i in x])(sentence.split(" ")))
Another way to go about it is by adding a space to your words reverseWord=reverseWord+word+" "
and removing the space at the end of your output by using .strip()
def reverse_words(str):
reverseWord = ""
list = str.split()
for word in list:
word = word[::-1]
reverseWord = reverseWord + word + " "
return reverseWord.strip()
check out this post on how it’s used
name=input('Enter first and last name:')
for n in name.split():
print(n[::-1],end=' ')
Here is a solution without using join / split :
def reverse(sentence):
answer = ''
temp = ''
for char in sentence:
if char != ' ':
temp += char
continue
rev = ''
for i in range(len(temp)):
rev += temp[len(temp)-i-1]
answer += rev + ' '
temp = ''
return answer + temp
reverse("This is a string to try")
You can also deal with noise in the string using the re
module:
>>> import re
>>> s = "The ntdog tnran"
>>> " ".join(w[::-1] for w in re.split(r"s+", s))
'ehT god nar'
Or if you don’t care:
>>> s = "The dog ran"
>>> re.sub(r"w+", lambda w: w.group(0)[len(w.group(0))::-1], s)
'Teh god nar'
I am having a small problem in my code. I am trying to reverse the words and the character of a string. For example “the dog ran” would become “ehT god nar”
The code almost works. It just does not add spaces. How would you do that?
def reverseEachWord(str):
reverseWord=""
list=str.split()
for word in list:
word=word[::-1]
reverseWord=reverseWord+word+""
return reverseWord
You are on the right track. The main issue is that ""
is an empty string, not a space (and even if you fix this, you probably don’t want a space after the final word).
Here is how you can do this more concisely:
>>> s='The dog ran'
>>> ' '.join(w[::-1] for w in s.split())
'ehT god nar'
def reversed_words(sequence):
return ' '.join(word[::-1] for word in sequence.split())
>>> s = "The dog ran"
>>> reversed_words(s)
... 'ehT god nar'
def reverse_words(sentence):
return " ".join((lambda x : [i[::-1] for i in x])(sentence.split(" ")))
Another way to go about it is by adding a space to your words reverseWord=reverseWord+word+" "
and removing the space at the end of your output by using .strip()
def reverse_words(str):
reverseWord = ""
list = str.split()
for word in list:
word = word[::-1]
reverseWord = reverseWord + word + " "
return reverseWord.strip()
check out this post on how it’s used
name=input('Enter first and last name:')
for n in name.split():
print(n[::-1],end=' ')
Here is a solution without using join / split :
def reverse(sentence):
answer = ''
temp = ''
for char in sentence:
if char != ' ':
temp += char
continue
rev = ''
for i in range(len(temp)):
rev += temp[len(temp)-i-1]
answer += rev + ' '
temp = ''
return answer + temp
reverse("This is a string to try")
You can also deal with noise in the string using the re
module:
>>> import re
>>> s = "The ntdog tnran"
>>> " ".join(w[::-1] for w in re.split(r"s+", s))
'ehT god nar'
Or if you don’t care:
>>> s = "The dog ran"
>>> re.sub(r"w+", lambda w: w.group(0)[len(w.group(0))::-1], s)
'Teh god nar'