Удаление элементов списка строк, индексами которого являются значения элементов другого списка

Есть лог-файл большого объема text.log, в нем необходимо найти строки, которые содержат записи, попадающие под регулярку, затем эти строки из списка text удалить, значения элементов списка ip_list_numbers как раз и будут индексами списка text.

Как удалить элементы списка text, индексы которых являются значениями списка ip_list_numbers?

import re

f = open('text.log')
text = f.readlines()

ip_list_numbers = []
for line in text:
    i += 1
    result = re.search(r'\{\"ip\"\:\[\"(?P<ip>\d+\.\d+\.\d+\.\d+)\"', str(text))
    if result:
       ip_list_numbers.append(i)

f.close()

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

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

Для удаления из списка используйте оператор del или метод pop (разница в том, что pop возвращает элемент), сам список строк нужно развернуть, чтобы удаление было с конца списка, т.к. уменьшение размера списка не актуализируется с текущим индексом и самое безобидное это приведет к выходу за пределы списка, а может удалить неправильный элемент.

Пример:

import re

with open('text.log') as f:
    lines = f.readlines()

ip_list_numbers = []

for i, line in reversed(list(enumerate(lines))):
    result = re.search(r'\{\"ip\"\:\[\"(?P<ip>\d+\.\d+\.\d+\.\d+)\"', line)
    if result:
        ip_list_numbers.append(i)
        lines.pop(i)

PS.

Вместо enumerate:

for i, line in reversed(list(enumerate(lines))):
    ...

можно использовать range:

for i in reversed(range(len(lines))):
    line = lines[i]
    ...
→ Ссылка