Проверьте, содержит ли список элементы из другого списка - PullRequest
1 голос
/ 10 апреля 2019

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

firstList = ["ABC", "DEF"]
otherList = ["ABCfoo", "foobar", "DEFfoo", "otherFooBar"]

matching = [s for s in otherList if "ABC" not in s] #Not sure how to apply this to multiple strings in a list

Желаемый результат:

["foobar", "otherFooBar"]

Ответы [ 3 ]

3 голосов
/ 10 апреля 2019
matching = [el for el in otherList if not any(substr in el for substr in firstList)]

Вы можете написать not any(substr in el ...) как all(substr not in el ...), если это имеет для вас больше смысла.

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

сделать копию и удалить элементы

>>> matching = otherList.copy()
>>> for a in firstList:
...     for b in matching:
...             if a in b:
...                     matching.remove(b)
... 
>>> matching
['foobar', 'otherFooBar']
1 голос
/ 10 апреля 2019

Вы можете использовать регулярные выражения,

import re

pattern = '|'.join(firstList)
matching = [word for word in otherList if not re.search(pattern, word) ]

['foobar', 'otherFooBar']
...