Python 从一个元素到另一个元素的块列表

Python chunk list from one element to another

我有以下代码:

for paragraph in document.paragraphs:
while paragraph.style.name == 'Heading 2':
    print(paragraph.style.name)
    print(paragraph.text)

这基本上行不通,因为我不知道如何适应正确的逻辑。 我正在使用 python docx 库 https://python-docx.readthedocs.io/en/latest/user/styles-using.html 遍历文档的段落。

现在,我想将段落列表拆分为从每个 Heading 2 开始的子列表,然后添加具有不同 paragraph.style.name 的所有下一段,直到下一个 Heading 2 元素,所以每个块将包含一个 Heading 2 段落及其相应的文本。

换句话说,我正在寻找一种将列表从一个元素拆分为另一个元素的块的方法。请帮助:)

您可以使用 itertools.groupby 来完成此操作:

from itertools import groupby

groups, next_group = [], []

for k, group in groupby(document.paragraphs, lambda x: x.style.name == 'Heading 2'):
    # If the predicate is True and next_group is populated,
    # we create a new chunk
    if k and next_group:
        groups.append(next_group)
        next_group = []

    # Fill up the current chunk
    for paragraph in group:
        # feel free to swap this out with a print statement
        # or whatever data structure suits you
        next_group.append({'style_name': paragraph.style.name, 'text': paragraph.text})

为了清楚起见,我在这里使用了字典列表,但您可以替换为任何数据结构