按特定元素拆分列表以获取列表Python

时间:2018-10-22 18:51:26

标签: python python-3.x list

输入

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

所需的输出:

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

我见过itertools groupby,但是无法正常工作。任何帮助,将不胜感激。而且...实际上不在列表中,只是说之间还有更多元素

1 个答案:

答案 0 :(得分:5)

groupby方法是最好的方法。

使用键函数item != '~'进行分组,并过滤​​为True的键(当x=='~'时,键函数返回Falseif 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]