Проверить список слов в другой строке

Я могу сделать это в python:

l = ['one', 'two', 'three']
if 'some word' in l:
   ...

Это проверит, существует ли в списке слово "какое-то слово". Но могу ли я сделать обратное?

l = ['one', 'two', 'three']
if l in 'some one long two phrase three':
    ...

Мне нужно проверить, находятся ли некоторые слова из массива в строке. Я могу сделать это с помощью цикла, но у этого пути больше строк кода.

Ответ 1

if any(word in 'some one long two phrase three' for word in list_):

Ответ 2

Если ваш список слов имеет значительную длину, и вам нужно сделать этот тест много раз, возможно, стоит преобразовать список в набор и использовать установленное пересечение для тестирования (с дополнительным преимуществом, которое вы получите слова, которые находятся в обоих списках):

>>> long_word_list = 'some one long two phrase three about above along after against'
>>> long_word_set = set(long_word_list.split())
>>> set('word along river'.split()) & long_word_set
set(['along'])

Ответ 3

Вот несколько альтернативных способов сделать это, что может быть быстрее или более подходящим, чем ответ KennyTM, в зависимости от контекста.

1) используйте регулярное выражение:

import re
words_re = re.compile("|".join(list_of_words))

if words_re.search('some one long two phrase three'):
   # do logic you want to perform

2) Вы можете использовать наборы, если хотите совместить целые слова, например. вы не хотите находить слово "the" во фразе "теоретические теоремы":

word_set = set(list_of_words)
phrase_set = set('some one long two phrase three'.split())
if word_set.intersection(phrase_set):
    # do stuff

Конечно, вы также можете выполнять целые словарные совпадения с регулярным выражением с помощью токена "\ b".

Эффективность этих и решений Kenny будет зависеть от нескольких факторов, таких как продолжительность слова и фраза, и как часто они меняются. Если производительность не является проблемой, тогда перейдите к самому простому, что, вероятно, является Kenny's.

Ответ 4

Самый простой и простой метод решения этой проблемы - использование re

import re

search_list = ['one', 'two', 'there']
long_string = 'some one long two phrase three'
if re.compile('|'.join(search_list),re.IGNORECASE).search(long_string): #re.IGNORECASE is used to ignore case
    # Do Something if word is present
else:
    # Do Something else if word is not present