根据条件创建列表列表

2024-09-28 17:17:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,如下所示:

result = """The following table provides the details.
acquired, by major class:
(US$ in millions)    Customer relationships       15year       $265
There is another line without space here.
Another table starts here:
(USS in millions)       2018       2017
Income (loss) from continuing operations       $298       $129"""

我必须把所有包含3个以上空格的句子放到一个列表中。以下是我迄今为止尝试过的一些东西:

lines = result.splitlines()
table_list = []
for i in range(len(lines)):
    if re.search(r'   {3,}', lines[i]):
        table_list.append(lines[i])

上述代码的结果输出:

['(US$ in millions)       Customer relationships      15year      $265','(USS in millions)     2018      2017','Income (loss) from continuing operations       $298      $129']

预期输出:

[['(US$ in millions)       Customer relationships      15year      $265'],['(USS in millions)       2018       2017','Income (loss) from continuing operations       $298       $129']]

输出条件的进一步解释:预期输出应为列表列表。当遍历每一行时,如果有连续的句子在两个单词之间包含3个或更多空格,那么所有这些行都应该是主列表中相同列表的一部分。如果一行在两个单词之间不包含3个或更多空格,则会断开链。如果另一行在两个单词之间包含3个或更多空格,则该行将成为主列表中新列表的一部分


Tags: infrom列表tablecustomeroperationsuslines
1条回答
网友
1楼 · 发布于 2024-09-28 17:17:53

itertools.groupbyre.findall一起使用:

from itertools import groupby

def has_spaces(str_):
    return bool(re.findall("\s{3,}", str_))

[list(g) for k, g in groupby(result.splitlines(), key=has_spaces) if k]

输出:

[['(US$ in millions)    Customer relationships       15year       $265'],
 ['(USS in millions)       2018       2017',
  'Income (loss) from continuing operations       $298       $129']]

相关问题 更多 >