Проверьте, содержит ли список элементы из другого списка

#python #python-2.7 #list-comprehension

#python #Python-2.7 #список-понимание

Вопрос:

Я понимаю, что версии этого задавались ранее, но я не могу найти именно то, что ищу. У меня есть два списка. Я хочу печатать только элементы из 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"]
  

Ответ №1:

 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 ...) будто это имеет для вас больше смысла.

Комментарии:

1. Работает отлично и легко понять. Спасибо за объяснение.

Ответ №2:

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

 >>> matching = otherList.copy()
>>> for a in firstList:
...     for b in matching:
...             if a in b:
...                     matching.remove(b)
... 
>>> matching
['foobar', 'otherFooBar']
  

Ответ №3:

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

 import re

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

['foobar', 'otherFooBar']