如何在不反转整个字符串的情况下反转字符串中的单个单词?

时间:2017-01-30 04:22:46

标签: python string python-2.7 list python-3.x

我是Python新手。 我想要反转一个字符串的单词而不反转整个字符串。重复的话语不应该被颠倒过来。

我想要这样的东西 -

输入 - Dom是一位艺术家,Dom住在英国。 输出 - Dom si na tsitra,Dom sevil ni KU。

2 个答案:

答案 0 :(得分:2)

您可以使用str.split创建一个包含每个单词的列表,collections.Counter可以轻松计算该列表中的每个单词。

from string import punctuation # '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
from collections import Counter

def reverse_text(text):
    punc = ''

    # remove any punctuation from end of text
    while text[-1] in punctuation:
        punc = text[-1] + punc
        text = text[:-1]

    # reverse text and add punctuation back on
    return text[::-1] + punc

inp = "Dom is an artist, Dom lives in UK"
words = inp.split() # split input
counter = Counter(words) # count each word. Note: counts exact matches.
# rejoin the string reversing any unique words
res = ' '.join( reverse_text(word) if counter[word] == 1 else word for word in words )
print(res)

# Output
Dom si na tsitra, Dom sevil ni KU

答案 1 :(得分:1)

您只需要计数器包来计算句子中每个唯一单词的数量。然后,您将遍历您的字符串并查看单词的计数是否等于1,在这种情况下,您将反转该单词,另一方面,您只需将其保留原样。然后,您将每个结果项目附加到一个emptey列表并将其与空格连接(即&#39;&#39; .join)

from collections import Counter
your_string = "Dom is an artist, Dom lives in UK" 
lst = []
counts = Counter(your_string.split())
for i in your_string.split(): 
   if counts[i]==1:lst.append(i[::-1])
   else: lst.append(i)      
' '.join(i for i in lst)