按段落分组字符串

时间:2014-11-10 16:21:03

标签: python list iterator

我想按“段落”对字符串列表进行分组;段落由一个空字符串分隔。

以下代码可以满足我的需求,但我正在寻找更优雅的语法(例如使用itertools)。

txt = ['First paragraph', ' continues',
       '',
       'Second ', 'paragraph']

para = [[]]
for ln in txt:
    if not ln:
        para.append([])
    else:
        para[-1].append(ln)

我实际上正在寻找某种group-while功能。

1 个答案:

答案 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']