2017-01-30 2 views
0

Я новичок в Python. Я хочу изменить слова строки без изменения всей строки. И слова, которые повторяются, не должны меняться.Как отменить отдельные слова в строке без изменения всей строки?

я хочу что-то вроде this-

INPUT- Дома художника, Дом живет в Великобритании. Выходные данные на дом, Dom sevil ni KU.

+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, в этом случае вы меняете слово, иначе вы просто оставите это так, как есть. вы затем добавите каждый результирующий элемент в список emptey и соедините их с пространством (то есть «.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

Я только что объяснил, как это работает :) –

Смежные вопросы