#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']