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

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但是无法让它工作.任何帮助,将不胜感激.另外......实际上并不在列表中,只是说中间有更多元素

Jea*_*bre 5

这种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)