Фильтр Python / удаление URL-адресов из списка

У меня есть текстовый файл с URL-адресами, около 14000. Ниже приведены несколько примеров:

http://www.domainname.com/pagename?CONTENT_ITEM_ID=100&param2=123
http://www.domainname.com/images?IMAGE_ID=10
http://www.domainname.com/pagename?CONTENT_ITEM_ID=101&param2=123
http://www.domainname.com/images?IMAGE_ID=11
http://www.domainname.com/pagename?CONTENT_ITEM_ID=102&param2=123

Я загрузил текстовый файл в список Python и пытаюсь выделить все URL-адреса с CONTENT_ITEM_ID в отдельный список. Как лучше всего сделать это в Python?

Ваше здоровье

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
0
5 381
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

list2 = filter( lambda x: x.find( 'CONTENT_ITEM_ID ') != -1,  list1 )

Фильтр вызывает функцию (первый параметр) для каждого элемента списка list1 (второй параметр). Если функция возвращает истину (ненулевое значение), элемент копируется в выходной список.

Лямбда в основном создает временную безымянную функцию. Это просто для того, чтобы не создавать функцию, а затем передавать ее, например:

function look_for_content_item_id( elem ):
    if elem.find( 'CONTENT_ITEM_ID') == -1:
        return 0
    return 1
list2 = filter( look_for_content_item_id, list1 )
Ответ принят как подходящий

Вот еще одна альтернатива Graeme's, использующая новый синтаксис понимания списка:

list2= [line for line in file if 'CONTENT_ITEM_ID' in line]

Что вы предпочтете - дело вкуса!

Мне понравился ответ @bobince (+1), но я подниму ставку.

Поскольку у вас довольно большой начальный набор, вы можете не загружать весь список в память. Если вам не нужен весь список для чего-то еще, вы можете использовать Выражение генератора Python для выполнения той же задачи, создавая отфильтрованный список по элементам по запросу:

for filtered_url in (line for line in file if 'CONTENT_ITEM_ID' in line):
   do_something_with_filtered_url(filtered_url)

Для полноты; Вы также можете использовать ifilter. Это похоже на фильтр, но не для создания списка.

from itertools import ifilter

for line in ifilter(lambda line: 'CONTENT_ITEM_ID' in line, urls):
    do_something(line)

Другие вопросы по теме