Всем привет!
Есть два списка строк:
["str1", "str2", "str3"...]
["str3 -> str10", "str20 -> str1", "str4 -> str7"...]
Мне нужно из второго удалить все элементы, в которых встречаются подстроки из первого списка.
Т.е. в данном примере в итоге во втором списке должно остаться ["str4 -> str7"...]
Подскажите, как это более красиво можно сделать, кроме как цикл в цикле + поиск подстроки и удаления по индексу?
Здравствуйте, -prus-, Вы писали:
P>Всем привет!
P>Есть два списка строк:
P>
P>["str1", "str2", "str3"...]
P>["str3 -> str10", "str20 -> str1", "str4 -> str7"...]
P>
P>Мне нужно из второго удалить все элементы, в которых встречаются подстроки из первого списка.
P>Т.е. в данном примере в итоге во втором списке должно остаться ["str4 -> str7"...]
P>Подскажите, как это более красиво можно сделать, кроме как цикл в цикле + поиск подстроки и удаления по индексу?
Всё равно цикл в цикле.
>>> (2.7): l1 = ["str1", "str2", "str3"]
>>> (2.7): l2 = ["str3 -> str10", "str20 -> str1", "str4 -> str7"]
>>> (2.7): [pair for pair in l2 if all(what not in pair for what in l1)]
['str4 -> str7']
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Здравствуйте, -prus-, Вы писали:
P>Подскажите, как это более красиво можно сделать, кроме как цикл в цикле + поиск подстроки и удаления по индексу?
Можно сконкатенировать первый список в однин большой паттерн и потом искать через него:
import re
pattern = re.compile('|'.join(map(re.escape, list1)))
result = [item for item in list2 if not pattern.search(item)]
P>Есть два списка строк:
P>
P>["str1", "str2", "str3"...]
P>["str3 -> str10", "str20 -> str1", "str4 -> str7"...]
P>
P>Мне нужно из второго удалить все элементы, в которых встречаются подстроки из первого списка.
P>Т.е. в данном примере в итоге во втором списке должно остаться ["str4 -> str7"...]
P>Подскажите, как это более красиво можно сделать, кроме как цикл в цикле + поиск подстроки и удаления по индексу?
Второй — словарь, по сути?
Используй его.