Как я могу отфильтровать список с другим списком в Python - PullRequest
0 голосов
/ 03 июня 2018

Я довольно новичок в Python, и, по сути, мне нужно отфильтровать и получить все элементы в списке A, которые существуют в списке B.

listA = ['cat','dog','cow']

listB = ['sentence 1','sentence 2 contains cat','sentence 3',
         'sentence 4','sentence 5','sentence 6 contains dog']

result = ['sentence 2 contains cat','sentence 6 contains dog']

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Это может быть так просто, используя понимание списка:

>>> lst = [x for x in listB for a in listA if a in x]
>>> lst
['sentence 2 contains cat', 'sentence 6 contains dog']

Редактировать: По сути, это то же решение, что и Олли , но работает на ~ 8-10% быстрее.Для двустороннего сравнения просто замените if a in x на if (a in x) or (x in a) (для ясности добавлены скобки).

0 голосов
/ 03 июня 2018

Для каждого элемента в одном списке, переберите каждый элемент в другом списке.Для каждого элемента убедитесь, что это именно то, что вам нужно.

listA = ['cat','dog','cow']

listB = ['sentence 1','sentence 2 contains cat','sentence 3','sentence 4','sentence 5','sentence 6 contains dog']

result = []

for itemA in listA:
    for itemB in listB:
        if (itemA in itemB):
            result.append(itemB)

Обратите внимание, что это работает только в одном направлении.Если вы хотите включить результаты, где элементы в listB являются in элементами в listA, то вы можете использовать:

listA = ['cat','dog','cow']

listB = ['sentence 1','sentence 2 contains cat','sentence 3','sentence 4','sentence 5','sentence 6 contains dog']

result = []

for itemA in listA:
    for itemB in listB:
        if (itemA in itemB):
            result.append(itemB)
        elif (itemB in itemA):
            result.append(itemA)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...