使用分隔符从列表中创建Python子列表

W0b*_*ble 11 python split sublist

我有以下列表:

['|', u'MOM', u'DAD', '|', u'GRAND', '|', u'MOM', u'MAX', u'JULES', '|']
Run Code Online (Sandbox Code Playgroud)

并希望它被"|"拆分 所以结果看起来像:

[[u'MOM', u'DAD'],[ u'GRAND'], [u'MOM', u'MAX', u'JULES']]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我只在网上找到需要一定长度元素的子列表示例

Ign*_*ams 15

>>> [list(x[1]) for x in itertools.groupby(['|', u'MOM', u'DAD', '|', u'GRAND', '|', u'MOM', u'MAX', u'JULES', '|'], lambda x: x=='|') if not x[0]]
[[u'MOM', u'DAD'], [u'GRAND'], [u'MOM', u'MAX', u'JULES']]
Run Code Online (Sandbox Code Playgroud)

  • 阅读[groupby documentation](http://docs.python.org/library/itertools.html#itertools.groupby)作为开始.:-) (2认同)

Joh*_*web 7

itertools.groupby() 做得很好......

>>> import itertools
>>> l = ['|', u'MOM', u'DAD', '|', u'GRAND', '|', u'MOM', u'MAX', u'JULES', '|']
>>> key = lambda sep: sep == '|'
>>> [list(group) for is_key, group in itertools.groupby(l, key) if not is_key]
[[u'MOM', u'DAD'], [u'GRAND'], [u'MOM', u'MAX', u'JULES']]
Run Code Online (Sandbox Code Playgroud)

  • 该死的!太慢了! (2认同)
  • 这比可接受的答案更具可读性.你去吧! (2认同)