Если нужны целые слова, сначала выделите их из текста и сравните со списком поиска. Простое word in text ищет подстроку и ошибочно найдёт, например, «кот» внутри «котлован».
Проверка наличия слов из списка в переданном тексте
Если нужны целые слова, сначала выделите их из текста и сравните со списком поиска. Простое word in text ищет подстроку и ошибочно найдёт, например, «кот» внутри «котлован».
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан массив слов. Требуется написать функцию, которая получает строку‑текст и проверяет, присутствует ли в ней хотя бы одно слово из указанного массива. Если такое слово найдено, функция должна вернуть True, в противном случае — False.
Ответ
Если нужны целые слова, сначала выделите их из текста и сравните со списком поиска. Простое word in text ищет подстроку и ошибочно найдёт, например, «кот» внутри «котлован».
Вариант без учёта регистра, где словом считается последовательность букв:
import re
def contains_any_word(text, words):
tokens = set(re.findall(r'[^\W\d_]+', text.casefold()))
return any(word.casefold() in tokens for word in words)
Пустой список поиска даёт False. Дефисы, апострофы и цифры требуют отдельных правил токенизации, если они входят в допустимые слова. Если же по условию нужны именно подстроки, достаточно any(word in text for word in words), но это другой контракт.