私はPythonの初心者です。 文字列全体を逆にすることなく、文字列の単語を逆にしたい。そして繰り返す言葉は逆転してはならない。文字列全体を逆にすることなく文字列内の個々の単語を逆にする方法はありますか?
iはthis-
INPUT-ドムのようなものは、アーティスト、ドムは英国に住んでほしいです。 出力 - ドミニカ共和国、ドミニカ共和国。
私はPythonの初心者です。 文字列全体を逆にすることなく、文字列の単語を逆にしたい。そして繰り返す言葉は逆転してはならない。文字列全体を逆にすることなく文字列内の個々の単語を逆にする方法はありますか?
iはthis-
INPUT-ドムのようなものは、アーティスト、ドムは英国に住んでほしいです。 出力 - ドミニカ共和国、ドミニカ共和国。
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
ありがとうございました! –
これは現在のところすべてを処理しないため、現在のところすべてを処理するわけではありませんので、ご承知ください。すべてを確認するのではなく、特定の句読点だけを修正することもできます。 –
Ohkay @Steven Summers –
文章内のユニークな単語の数をカウントするには、カウンターパッケージが必要です。文字列をループして、単語の数が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)
私はちょうどそれが動作する方法を説明しました:) –
Domが元に戻されないのはなぜですか? –
'split()'テキストを単語に変換してから、どの単語が繰り返しであるかを確認し、後でいくつかの単語だけを逆転させ、再び 'join()'単語を返します。しかし、あなたは '.'と'、 ':)に問題があります。 – furas
これを小さなステップに分割してください。まず、文字列を単語に分割する必要があります。 –