Разделить список по определенному элементу, чтобы получить список списков Python - PullRequest
0 голосов
/ 22 октября 2018

Вход

['~', 'n1', 'n2', ..., 'nn', '~', 'k1', 'k2', ..., 'kn', '~']

Требуемый вывод:

[['n1', 'n2', ..., 'nn'],['k1', 'k2', ..., 'kn']]

Я видел группу itertools, но не могу заставить ее работать.Любая помощь будет оценена.Также ... на самом деле нет в списке, я просто говорю, что между

есть больше элементов

1 Ответ

0 голосов
/ 22 октября 2018

Лучше всего использовать метод 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...