Python. Нестандартная фильтрация списка
Есть вот такой список строк, включая пустые:
lst = [
'* авто / ауто',
'! автомат .СеИ неод мI1 мнII1',
'автостоп 2 .СеИ неод мI1 мнII1 * устройство',
'! автомобиль 2 .СеИ неод мI3 мнI4',
'автостоп 3* .СеИ неод м!I1 * использование попутных машин',
'',
'антон .СеИ одуш м!I1 *??',
'! антон .СеИ одуш м!I1 *??',
'антонов .ПмИ III1',
'антонов .ПмИ IIIф о',
'',
'аукцион .СеИ неод мI1 мнII1 * <= augere',
'! август .СеИ одуш м!I1',
'август .СеИ одуш м!I1',
'! август .СеИ неод мI1 мнII1',
'август .СеИ неод мI1 мнII1',
]
То есть список строк делится на группы. Группы разделены пустой строкой.
Как по-быстрому удалить только первые строки из каждой группы?
Ответы (3 шт):
Автор решения: CrazyElf
→ Ссылка
Предлагаю альтернативный вариант. Очень люблю варианты перебора и сравнения соседних элементов через zip, без использования индексов. Это не самый оптимальный вариант когда данных много, потому что создаётся лишняя копия списка (правда, это вроде можно при желании обойти, используя итератор):
lst1 = [curr for prev, curr in zip(lst, lst[1:]) if prev]
Автор решения: Voko
→ Ссылка
Ещё один вариант:
flag = False
out_list = [x for x in in_list if (flag, flag := x)[0]]