bbd*_*108 1 python list python-3.x
输入
['~', 'n1', 'n2', ..., 'nn', '~', 'k1', 'k2', ..., 'kn', '~']
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[['n1', 'n2', ..., 'nn'],['k1', 'k2', ..., 'kn']]
Run Code Online (Sandbox Code Playgroud)
我见过itertools groupby但是无法让它工作.任何帮助,将不胜感激.另外......实际上并不在列表中,只是说中间有更多元素
这种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]
Run Code Online (Sandbox Code Playgroud)
结果:
[['n1', 'n2', 'nn'], ['k1', 'k2', 'kn']]
Run Code Online (Sandbox Code Playgroud)
请注意,您必须强制对已发布的组进行迭代,因为groupby返回可迭代(以防您只需要再次迭代它们)
如果你有空字符串,它甚至更简单:不需要lambda,依赖值的真实性并使用bool运算符:
lst = ['', 'n1', 'n2', 'nn', '', 'k1', 'k2', 'kn', '']
result = [list(v) for k,v in itertools.groupby(lst,bool) if k]
Run Code Online (Sandbox Code Playgroud)