Удалить ссылки из списка

Есть список доменов

a = ['*.abc.ru', '*.def.com', '*.qwery.ru']

И есть список ссылок

b = ['http://abc.ru', 'http://def.com', 'http://qwery.ru']

из ссылок я могу получить домен

for link in b:
    link.split('/')[2]

но как мне удалить из списка все ссылки, которые содержат домены из списка "a"?


Ответы (2 шт):

Автор решения: Dmitry

Как я понял на выходе вы хотите иметь список со ссылками, у которых хосты не содержатся в списке a. Если это так, то держите вот это:

a = ['*.abc.ru', '*.def.com', '*.qwery.ru']
b = ['http://abc.ru', 'http://def.com', 'http://qwery.ru', 'https://test.com', 'http://googgle.ru']

a_clear = [item.replace('*.', '') for item in a]

result = []

for item in b:
    flag = True
    for host in a_clear:
        if host in item:
            flag = False
    if flag:
        result.append(item)

Я делаю список с хостами без лишних знаков, затем пробегаюсь по спискам и нахожу совпадение, если такое существеут, то переменная flag принимает значение False и данные в результирующий список не попадают. Поскольку я добавил две ссылки с неопределенными хостами в a, то результат исполнения будет

>>> print(result)
['https://test.com', 'http://googgle.ru']

Здесь я создаю отдельную переменную result, куда помещаю необходимые данные. Почему так? Тип данных list - это изменяемый тип данных и если применять методы удаления в цикле, то могут появиться неожиданные результаты на выходе, поскольку длина списка и индексация будут меняться в течении работы этого цикла.

Если есть необходимость сохранить имя переменной b, то в конце работы скрипта определите следующее

b = result[:]

То есть сделать копию списка result в b.

→ Ссылка
Автор решения: SergFSM

при желании можно втиснуть все в одно списковое включение (list comprehension), примерно так:

a = ['*.abc.ru', '*.def.com', '*.qwery.ru']
b = ['http://abc.ru', 'http://def.com', 'http://qwery.ru', 'https://mail.ru', 'https://yandex.ru']

res = [i for i in b if not any(i.endswith(j[2:]) for j in a)]

>>> res
'''
['https://mail.ru', 'https://yandex.ru']
→ Ссылка