首页 > 解决方案 > 根据规则对字符串列表求和

问题描述

我有一个巨大的 python 列表,如下例所示:

ls = ['name: John', 'John has ', '4 yellow ', 'cars.', 'name: Angelina', 'Angelina has ', '5 yellow', 'cars.']

我想以这种格式加入这些信息:

ls = ['name: John', 'John has 4 yellow cars.', 'name: Angelina', 'Angelina has 5 yellow cars.']

我试过这段代码

  with open ('names.txt', 'r') as text:  
    lines = text.readlines()
    for index,line in enumerate(lines):
        if not linha.startswith('name:'):
            ls2.append(lines[index]+lines[index+1])

但这并不好,因为我有类似的东西:

ls = ['name: John', 'John has 4 yellow', '4 yellow cars.', 'cars.name: Angelina']

您知道我该如何执行此任务吗?

标签: pythonstringlist

解决方案


您可以使用itertools.groupby

import itertools

ls = ['name: John', 'John has ', '4 yellow ', 'cars.', 'name: Angelina', 'Angelina has ', '5 yellow', 'cars.']

g = itertools.groupby(ls, lambda x: x.startswith('name: '))
output = [''.join(v) for _, v in g]
print(output) # ['name: John', 'John has 4 yellow cars.', 'name: Angelina', 'Angelina has 5 yellowcars.']

它根据每个项目是否以'name: ';开头对项目进行分组

  1. 以 开头的项目'name: '构成一个组(即['name: John'])。
  2. 接下来的一些不这样做的项目形成一个组(即,['John has ', '4 yellow ', 'cars.'])。
  3. 这样做的下一个项目形成另一个组 ( ['name: Angelina'])。
  4. ……以此类推。

然后join连接每个组中的字符串。


推荐阅读