我想按“段落”对字符串列表进行分组;段落由一个空字符串分隔。
以下代码可以满足我的需求,但我正在寻找更优雅的语法(例如使用itertools
)。
txt = ['First paragraph', ' continues',
'',
'Second ', 'paragraph']
para = [[]]
for ln in txt:
if not ln:
para.append([])
else:
para[-1].append(ln)
我实际上正在寻找某种group-while
功能。
答案 0 :(得分:2)
您可以使用itertools.groupby()
:
from itertools import groupby
paragraphs = (list(g) for empty, g in groupby(txt, lambda l: not len(l)) if not empty)
这会创建一个生成器,通过对行长度进行分组来列出段落:
>>> from itertools import groupby
>>> txt = ['First paragraph', ' continues',
... '',
... 'Second ', 'paragraph']
>>> paragraphs = (list(g) for empty, g in groupby(txt, lambda l: not len(l)) if not empty)
>>> for para in paragraphs:
... print para
...
['First paragraph', ' continues']
['Second ', 'paragraph']