如何使用Python反转字符串中的单词

时间:2015-08-11 22:13:18

标签: python string reverse

我试图扭转一个字符串的单词,但有困难,任何帮助将不胜感激:

S = " what is my name"

def reversStr(S):
    for x in range(len(S)):
        return S[::-1]
        break

我现在得到的是:eman ym si tahw

但是,我想得到:tahw is ym eman(单词反转)

12 个答案:

答案 0 :(得分:8)

def reverseStr(s):
  return ' '.join([x[::-1] for x in s.split(' ')])

答案 1 :(得分:1)

orig = "what is my name"
reverse = ""
for word in orig.split():
    reverse = "{} {}".format(reverse, word[::-1])
print(reverse)

答案 2 :(得分:1)

由于其他所有人都覆盖了标点符号移动的情况,我将覆盖您不希望标点符号移动的情况。

import re
def reverse_words(sentence):
    return re.sub(r'[a-zA-Z]+', lambda x : x.group()[::-1], sentence)

打破这种局面。

re是python的正则表达式模块,re.sub是该模块中处理替换的函数。它有三个必需的参数。

第一个是你匹配的正则表达式。在这种情况下,我正在使用r'\w+'。 r表示原始字符串,[a-zA-Z]匹配所有字母,+表示“至少一个”。

第二个是要替换的字符串,或者是接受re.MatchObject并输出字符串的函数。我正在使用lambda(或无名)函数,只输出匹配的字符串,反转。

第三个是你想在替换中找到的字符串。

所以“我叫什么名字?” - > “tahW si ym eman?”

附录:

我最初考虑了r'\w+'的正则表达式,因为更好的unicode支持(如果给出正确的标志),但\w还包括数字和下划线。匹配-也可能是期望的行为:正则表达式将是r'[a-zA-Z-]+'(注意尾随连字符)和r'[\w-]+'但是您可能希望不匹配双短划线(即{{1因此可能需要更多的正则表达式修改。

内置--会输出一个reversed对象,您必须将其强制转换为字符串,因此我通常更喜欢reversed选项。

答案 3 :(得分:0)

尝试将字符串中的每个单词拆分为一个列表(请参阅:https://docs.python.org/2/library/stdtypes.html#str.split)。

示例:

>>string = "This will be split up"
>>string_list = string.split(" ")
>>string_list
>>['This', 'will', 'be', 'split', 'up']

然后遍历列表并反转您已经工作的每个成分列表项(即单词)。

答案 4 :(得分:0)

def reverse_in_place(phrase):
    res = []
    phrase = phrase.split(" ")
    for word in phrase:
        word = word[::-1]
        res.append(word)
    res = " ".join(res)
    return res

答案 5 :(得分:0)

[线程已经关闭,但IMO,没有得到很好的回答]

python string.lib不包含str.reverse()方法。
所以使用内置的reverse()函数调用来完成同样的事情。

>>> S =“我叫什么名字”
>>> ( “”)。加入(反转(S))
 'eman ym si tahw'

答案 6 :(得分:0)

def ters(a):
    if a == "":
        return ""
    else:
        z = ters(a[1:]) + a[0]
        return z

反向字符串 - > gnirts esreveR

def ters2(k):
    y = ters(k).split()
    for i in range(len(y)-1,-1,-1):
        print y[i],

- > esreveR gnirts

答案 7 :(得分:0)

没有明显的方法可以在Python中“真正”反转字符串。但是,您可以执行以下操作:

def reverse_string_inplace(string):
    w = len(string)-1
    p = w
    while True:
        q = string[p]
        string = ' ' + string + q
        w -= 1
        if w < 0:
            break
    return string[(p+1)*2:]

希望这是有道理的。

答案 8 :(得分:0)

在Python中,字符串是不可变的。这意味着一旦创建了字符串,就无法更改字符串。因此不可能进行就地反转。

有很多方法可以在python中反转字符串,但是反向字符串需要内存分配。

print(' '.join(word[::-1] for word in string))

答案 9 :(得分:0)

inplace是指在不创建副本的情况下修改对象。是的,就像我们许多人已经指出的那样,python字符串是不可变的。因此,从技术上讲,我们无法反转python string数据类型对象inplace。但是,如果您使用可变数据类型,例如说bytearray用于存储字符串字符,则实际上可以将其反转inplace

#slicing creates copy; implies not-inplace reversing
def rev(x):
    return x[-1::-1]

# inplace reversing, if input is bytearray datatype
def rev_inplace(x: bytearray):
    i = 0; j = len(x)-1
    while i<j:
        t = x[i]
        x[i] = x[j]
        x[j] = t
        i += 1; j -= 1
    return x

输入:

x = bytearray(b'some string to reverse')      
rev_inplace(x)

输出:

bytearray(b'esrever ot gnirts emose')

答案 10 :(得分:0)

s1 = input("Enter a string with multiple words:")

print(f'Original:{s1}')
print(f'Reverse is:{s1[::-1]}')

each_word_new_list = []

s1_split = s1.split()

for i in range(0,len(s1_split)):
    each_word_new_list.append(s1_split[i][::-1])

print(f'New Reverse as List:{each_word_new_list}')

each_word_new_string=' '.join(each_word_new_list)

print(f'New Reverse as String:{each_word_new_string}')

答案 11 :(得分:0)

如果句子包含多个空格,那么使用 split() 函数会造成麻烦,因为您不知道在对句子中的每个单词进行反转后需要重新加入多少空格。下面的片段可能会有所帮助:

# Sentence having multiple spaces
given_str = "I  know this   country runs by mafia "
tmp = ""
tmp_list = []
for i in given_str:
    if i != ' ':
        tmp = tmp + i
    else:      
        if tmp == "":
            tmp_list.append(i)
        else:
            tmp_list.append(tmp)
            tmp_list.append(i)
            tmp = ""

print(tmp_list)
rev_list = []
for x in tmp_list:
    rev = x[::-1]
    rev_list.append(rev)
print(rev_list)
print(''.join(rev_list))

输出: enter image description here