Лучше всего использовать метод groupby
.
группировать с помощью ключевой функции item != '~'
и фильтровать по ключу True
(когда x=='~'
, ключевая функция возвращает False
, условие if k
отфильтровывает это)
import itertools
lst = ['~', 'n1', 'n2', 'nn', '~', 'k1', 'k2', 'kn', '~']
result = [list(v) for k,v in itertools.groupby(lst,lambda x : x!='~') if k]
результат:
[['n1', 'n2', 'nn'], ['k1', 'k2', 'kn']]
обратите внимание, что вы должны принудительно выполнять итерации для выпущенных групп, поскольку groupby
возвращает итерации (только вна случай, если вам просто нужно повторить их снова)
Если у вас есть пустые строки, это еще проще: не нужно lambda
, положитесь на истинность значений и используйте оператор bool
:
lst = ['', 'n1', 'n2', 'nn', '', 'k1', 'k2', 'kn', '']
result = [list(v) for k,v in itertools.groupby(lst,bool) if k]