Как найти ключевое слово в списке строк и вернуть эту строку? - PullRequest
1 голос
/ 28 апреля 2019

У меня есть список строк длиной в несколько слов, и мне нужно найти два ключевых слова и вернуть строки, содержащие эти два ключевых слова.

Я пытался перебрать строки, но не смог этого сделать. Я попробовал функцию .find (), но она не удалась в списке строк.

Допустим, у нас есть список:

list = ["The man walked the dog", "The lady walked the dog","Dogs 
are cool", "Cats are interesting creatures", "Cats and Dogs was an 
interesting movie", "The man has a brown dog"]

Я хотел бы перебрать список строк и вернуть строки в новом списке, который содержит слова «человек» и «собака». В идеале, чтобы получить следующее:

list_new = ["The man walked the dog", "The man has a brown dog"]

Ответы [ 3 ]

7 голосов
/ 28 апреля 2019

Попробуйте это:

list_ = ["The man walked the dog", "The lady walked the dog","Dogs are cool", "Cats are interesting creatures", "Cats and Dogs was an interesting movie", "The man has a brown dog"]
l1 = [k for k in list_ if 'man' in k and 'dog' in k]

ВЫХОД :

['The man walked the dog', 'The man has a brown dog']

Примечание. Не назначайте имя переменной как list.

2 голосов
/ 29 апреля 2019

Я бы использовал регулярное выражение, чтобы избежать совпадений со словами типа многообразие или догма :

import re

l = [
    "The man walked the dog", 
    "The lady walked the dog", 
    "Dogs are cool", 
    "Cats are interesting creatures",
    "Cats and Dogs was an interesting movie", 
    "The man has a brown dog",
    "the manner dogma"
]

words = ["man", "dog"]
results = [x for x in l if all(re.search("\\b{}\\b".format(w), x) for w in words)]
results

>>> ['The man walked the dog', 'The man has a brown dog']
0 голосов
/ 28 апреля 2019

Попробуйте это:

words = ["man", "dog"]
l = ["The man walked the dog", "The lady walked the dog","Dogs are cool", "Cats are interesting creatures", "Cats and Dogs was an interesting movie", "The man has a brown dog"]
new_list = [item for item in l if all((word in item) for word in words)]

дает

['The man walked the dog', 'The man has a brown dog']

(я не использовал имя list, поскольку это маскировало бы встроенный тип.)

...