2017-01-30 12 views
0

私はPythonの初心者です。 文字列全体を逆にすることなく、文字列の単語を逆にしたい。そして繰り返す言葉は逆転してはならない。文字列全体を逆にすることなく文字列内の個々の単語を逆にする方法はありますか?

iはthis-

INPUT-ドムのようなものは、アーティスト、ドムは英国に住んでほしいです。 出力 - ドミニカ共和国、ドミニカ共和国。

+1

Domが元に戻されないのはなぜですか? –

+0

'split()'テキストを単語に変換してから、どの単語が繰り返しであるかを確認し、後でいくつかの単語だけを逆転させ、再び 'join()'単語を返します。しかし、あなたは '.'と'、 ':)に問題があります。 – furas

+0

これを小さなステップに分割してください。まず、文字列を単語に分割する必要があります。 –

答えて

2

str.splitは、各単語を含むリストを作成し、collections.Counterを使用すると、そのリスト内の各単語を簡単に数えることができます。

from string import punctuation # '!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~' 
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 
+0

ありがとうございました! –

+0

これは現在のところすべてを処理しないため、現在のところすべてを処理するわけではありませんので、ご承知ください。すべてを確認するのではなく、特定の句読点だけを修正することもできます。 –

+0

Ohkay @Steven Summers –

1

文章内のユニークな単語の数をカウントするには、カウンターパッケージが必要です。文字列をループして、単語の数が1に等しいかどうかを確認します。その場合は、単語を逆にします。それ以外の場合は、それをそのままにします。それぞれの結果の項目を空のリストに追加し、スペースで結合します(つまり、 '' .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) 
+0

私はちょうどそれが動作する方法を説明しました:) –

関連する問題