чтобы проверить присутствует ли в строке string хотя бы один элемент из списка lst можно разбить строку на слова, преобразовать получившийся список в множество и получить пересечение данного множества с множеством, полученным из списка lst:
res = bool(set(string.split()) & set(lst))
если в результате получится непустой список - это будет показывать, что хотя бы одно слово из списка содержиться в строке.
UPDATE1:
Думаю функция деления на слова не так быстра, если на входе будет
длинная строка
В качестве примера разобъем полное собрание сочинений А.П.Чехова на слова:
In [46]: from pathlib import Path
In [47]: text = Path(r'D:\download\Чехов Антон. Полное собрание сочинений и писем - ModernLib.Ru.txt').read_text()
In [48]: len(text)
Out[48]: 833011
In [49]: %timeit text.split()
19.3 ms ± 196 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
замер скорости проверки на вхождение слов в полном собрании сочинений Чехова:
In [50]: %timeit bool(set(text.split()) & set(lst))
35 ms ± 171 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
UPDATE2: более простой и, похоже, более быстрый способ (скорость будет зависеть от размера списка lst):
In [55]: %timeit sum(x in text for x in lst)
1.49 ms ± 1.08 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
lst— обязательно отдельные слова или могут быть частью других слов (abcfooabcи т.п.)? Если отдельные слова, то что их разделяет — только пробельные символы, или точки-запятые-скобки тоже? – andreymal Sep 22 '18 at 20:16grep -Ff words text(если выражение в text файл записать, а слова записать в words файл -- одно на строчку). Связанный вопрос: Поиск повторяющихся строк – jfs Sep 23 '18 at 11:19