[python] Удаление из списка
От: -prus-  
Дата: 23.01.19 11:40
Оценка:
Всем привет!

Есть два списка строк:
    ["str1", "str2", "str3"...]
    ["str3 -> str10", "str20 -> str1", "str4 -> str7"...]
Мне нужно из второго удалить все элементы, в которых встречаются подстроки из первого списка.
Т.е. в данном примере в итоге во втором списке должно остаться ["str4 -> str7"...]
Подскажите, как это более красиво можно сделать, кроме как цикл в цикле + поиск подстроки и удаления по индексу?
С уважением,
Евгений
Re: [python] Удаление из списка
От: Senyai Россия http://www.arseniy.net
Дата: 23.01.19 11:51
Оценка: 4 (1)
Здравствуйте, -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']
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re: [python] Удаление из списка
От: eugals Россия  
Дата: 23.01.19 15:42
Оценка: 10 (2) -1
Здравствуйте, -prus-, Вы писали:

P>Подскажите, как это более красиво можно сделать, кроме как цикл в цикле + поиск подстроки и удаления по индексу?


Можно сконкатенировать первый список в однин большой паттерн и потом искать через него:
import re
pattern = re.compile('|'.join(map(re.escape, list1)))
result = [item for item in list2 if not pattern.search(item)]
Отредактировано 23.01.2019 15:54 eugals . Предыдущая версия .
Re: [python] Удаление из списка
От: Ватакуси Россия  
Дата: 29.01.19 20:55
Оценка:
P>Есть два списка строк:
P>

    P>["str1", "str2", "str3"...]
    P>["str3 -> str10", "str20 -> str1", "str4 -> str7"...]
    P>
P>Мне нужно из второго удалить все элементы, в которых встречаются подстроки из первого списка.
P>Т.е. в данном примере в итоге во втором списке должно остаться ["str4 -> str7"...]
P>Подскажите, как это более красиво можно сделать, кроме как цикл в цикле + поиск подстроки и удаления по индексу?

Второй — словарь, по сути?
Используй его.
Все будет Украина!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.