Python вопрос по спискам, используя только lambda

Такая задача Пользователь вводит через запятую ключевые слова, после этого вводит текст из нескольких предложений. Вывести предложение целиком, если в нём присутствует хотя бы два ключевых слова. Вывести первое слово из предложения, если в нем встречается только одно ключевое слово. С одним ключевым словом всё понятно, а вот с хотя бы двумя как решить не пойму

keywords = input('Введите ключевые слова через запятую: ').split(',')
words = input('Введите текст из нескольких предложений: ').split(' ')

print(list(map(lambda x: x in words, keywords)))

Ответы (1 шт):

Автор решения: AivanF.

Исходные значения:

text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
keywords = ['sit', 'in', 'is']

Версия с функциональным программированием, лямбдами и мапами:

print(list(map(  # 4. Возвращаем тьюплы в строки, превращаем в список и выводим.
    lambda pair: pair[1],
    filter(  # 3. Фильтруем по количеству совпадений
        lambda pair: pair[0] > 1,
        map(  # 2. Превращаем строки-предложения в тьюплы с парой значений:
            lambda sen: (
                sum(map(lambda word: word in sen, keywords)),  # 2.1. количество совпадений
                sen  # 2.2. и исходное предложение
            ),
            text.split('.')  # 1. Разбиваем на предложения
        )
    )
)))

Версия с императивным программированием и lists comprehension:

# 1. Разбиваем на предложения
sentences = text.split('.')
# 2. Превращаем строки-предложения в тьюплы с парой значений
pairs = [
    (sum(word in sen for word in keywords), sen)
    for sen in sentences
]
# 3. Фильтруем по количеству совпадений
pairs = [
    pair for pair in pairs
    if pair[0] > 1
]
# 4. Возвращаем тьюплы в строки, превращаем в список и выводим.
sentences = [pair[1] for pair in pairs]
print(sentences)
→ Ссылка