Найти - Пользователи
Полная версия: Есть две строки или два списка. Как удалить окончания?
Начало » Python для новичков » Есть две строки или два списка. Как удалить окончания?
1
lioha1984
Есть две строки или два списка.
stem_rules = ('less', ‘ship’, ‘ing’, ‘es’, ‘ly’,'s')
text = ('friends', ‘very’, ‘friendly’, ‘keeping’, ‘friendship’)
Нужно основываясь на stem_rules удалить окончания из text.

получить: ('friend', ‘very’, ‘friend’, ‘keep’, ‘friend’)

Как это сделать при помощи функций map(),filter() и т.д., и функции lambda?
Paranoia_Agent
stem_rules = ('less', 'ship', 'ing', 'es', 'ly','s')
text = ('friends', 'very', 'friendly', 'keeping', 'friendship')
def func(str,end):
    for x in end:
        if str.rpartition(x)[2]=='': 
            return(str.rpartition(x)[0])
    return(str)
result=[func(x,stem_rules) for x in text]
print(result)

Стоит заметить, что если слово оканчивается на ‘es’, оно же оканчивается и на ‘s’. Данный алгоритм будет искать до первого вхождения, т.е. если написать:
stem_rules = ('less', 'ship', 'ing', 's', 'ly','es')
то окончание ‘es’ никогда не будет найдено, т.к. первым найдется ‘s’

P.S. Никогда не понимал людей: вот зачем задавать вопрос в нескольких ветках? Пишешь ответ, а потом видишь, что он уже написан, да еще и 2 раза
dimy44
str служебное имя, долой привычку так переменные именовать!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB