Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 12, 2014 19:56:14

lioha1984
Зарегистрирован: 2014-12-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Есть две строки или два списка. Как удалить окончания?

Есть две строки или два списка.
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?

Отредактировано lioha1984 (Дек. 12, 2014 22:00:06)

Офлайн

#2 Дек. 13, 2014 01:45:54

Paranoia_Agent
Зарегистрирован: 2014-06-25
Сообщения: 75
Репутация: +  5  -
Профиль   Отправить e-mail  

Есть две строки или два списка. Как удалить окончания?

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 раза

Отредактировано Paranoia_Agent (Дек. 13, 2014 02:23:06)

Офлайн

#3 Дек. 14, 2014 09:05:56

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Есть две строки или два списка. Как удалить окончания?

str служебное имя, долой привычку так переменные именовать!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version