Вот один подход с использованием itertools.groupby
:
from itertools import groupby
out = [[*v] for k,v in groupby(main_list, key= lambda x: x != '-break-') if k]
print(out)
[['one', 'two'],
['three'],
['four', 'five', 'six'],
['seven', 'eight', 'nine', 'ten']]
itertools.groupby
группирует последовательные значения, которые равны. Однако, когда предоставляется key
, применяется та же логика, но с использованием результата из функции key
. В этом случае функция key
будет генерировать следующие значения:
[x != '-break-' for x in main_list]
# [False, True, True, False, True, False, True, True, True, True, True, True, True]
Таким образом, на каждой итерации мы будем получать tuple
, состоящий из ключа группировки (либо True
, либо False
), и список с соответствующими значениями. Таким образом, чтобы сохранить только те, у которых ключ группировки равен True
, нам нужно только добавить if k
в качестве условия.