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]