stem_rules = ('less', 'ship', 'ing', 'es', 'ly','s')
text = ('friends', 'very', 'friendly', 'keeping', 'friendship')
def del_end(word, ends = stem_rules):
for x in ends:
if word.endswith(x):
word = word[:-len(x)]
break # удаляем только первое попавшееся окончание
return word
>>> map(del_end, text)
['friend', 'very', 'friend', 'keep', 'friend']
>>> map(lambda x: del_end(x), text) # или map(lambda x: del_end(x, stem_rules), text)
['friend', 'very', 'friend', 'keep', 'friend']
>>> f = lambda x: [del_end(y) for y in x]
>>> f(text)
['friend', 'very', 'friend', 'keep', 'friend']
Получилось довольно исскуственно. Тут наверное стоит смотреть в сторону регулярок, а я в них не разбираюсь.
Ну а спомощью filter можно найти те слова из списка у которых отсутствуют искомые окончания:
>>> filter(lambda x: x == del_end(x), text)
('very',)