Python возвращает строку списка элементов

У меня есть список слов и строка, например, так:

wordlist = ['fox', 'over', 'lazy']
paragraph = 'A quick brown fox jumps over the lazy fox.'

Я хочу знать, какие слова в списке встречаются в строке и возвращать их. Есть ли какой-нибудь относительно умный способ сделать это?

Например, any(word in paragraph for word in wordlist) только возвращается True или же False, но не фактические слова, которые были найдены.

2 ответа

Решение

Используйте свой тест в понимании списка:

words_in_paragraph = [word for word in wordlist if word in paragraph]

Это сдвинуло тест на any() генератор до конца.

Демо-версия:

>>> wordlist = ['fox', 'over', 'lazy']
>>> paragraph = 'A quick brown fox jumps over the lazy fox.'
>>> [word for word in wordlist if word in paragraph]
['fox', 'over', 'lazy']
>>> another_wordlist = ['over', 'foo', 'quick']
>>> [word for word in another_wordlist if word in paragraph]
['over', 'quick']

Обратите внимание, что так же, как ваш any() test, это будет работать и для частичных совпадений слов, конечно:

>>> partial_words = ['jump', 'own']
>>> [word for word in partial_words if word in paragraph]
['jump', 'own']

Вы можете использовать фильтр

included_words = filter(lambda word: word in paragraph, wordlist)

Хотя в python3 это создаст итератор, поэтому, если вы хотите использовать список для понимания списка (или вы можете просто вызвать список по результату фильтра, если хотите), в противном случае итератор подойдет.

included_words = list(filter(lambda word: word in paragraph, wordlist))

ИЛИ ЖЕ

included_words = [word for word in wordlist if word in paragraph]
Другие вопросы по тегам