2014-11-14 3 views
-3

Say У меня есть два списка:Как удалить элементы из списка, если они совпадают все детали в другом списке в Python

list1 = ['a', 'b'] 
list2 = ['cat', 'dog', 'bird'] 

Что лучший способ, чтобы избавиться от каких-либо предметов в list2, которые содержат какой-либо из подстроки в списке1? (В этом примере останется только «собака»).

ответ

3

Вы можете использовать list comprehension с оператором any(). Вы просматриваете элементы второго списка, если какой-либо элемент (charachters) в списке1 находится в выбранном слове, мы его не принимаем. В противном случае добавим его.

list1 = ['a', 'b'] 
list2 = ['cat', 'dog', 'bird'] 

print [x for x in list2 if not any(y for y in list1 if y in x)] 

Выход:

['dog'] 

Вы можете использовать filter(), а также.

print filter(lambda x: not any(y for y in list1 if y in x), list2) 
+1

Зачем делать список из строки? Просто сделайте '... if y in x' – jayelm

+0

Отредактировано @Jesse Вы правы! –

0

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

import re 
pat = re.compile('|'.join(list1)) 
res = [] 
for str in list2: 
    if re.search(pat, str): 
     continue 
    else: 
     res.append(str) 
print res 
+1

're' похоже на overkill для простой проблемы с подстрокой. – jayelm

+0

Действительно? Я думал, что регулярное выражение - лучший способ сделать со строками. Возможно, я ошибаюсь, спасибо, что указали это. – sincosmos

+0

Определенно самый гибкий и мощный, но простого оператора 'in' достаточно, чтобы проверить членство в подстроке, что все, что требуется в этой задаче. – jayelm

Смежные вопросы