python - 根据规则对字符串列表求和
问题描述
我有一个巨大的 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']
您知道我该如何执行此任务吗?
解决方案
您可以使用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: '
;开头对项目进行分组
- 以 开头的项目
'name: '
构成一个组(即['name: John']
)。 - 接下来的一些不这样做的项目形成一个组(即,
['John has ', '4 yellow ', 'cars.']
)。 - 这样做的下一个项目形成另一个组 (
['name: Angelina']
)。 - ……以此类推。
然后join
连接每个组中的字符串。
推荐阅读
- python - 从python中的列表中打印最大或最小元素
- javascript - 你会在文本字段中测试什么?
- shiny - 用于根据用户输入生成列汇总表的闪亮应用程序
- php - 将数据保存到数据库时出现问题,PHP MYSQL
- c# - 从 C# 更新 BigQuery 数据集访问
- python - 创建并初始化时间列 Python
- javascript - Angular 8.2 + Firebase:在`ng build --prod`结束时出现`ERROR in ./src/app/app.module.ngfactory.js`错误导致进程失败
- javascript - 使用自定义排序时不重绘 Ag-Grid
- python - 为什么从随机数列表构造的集合的输出总是有序的?
- javascript - 如何使用 Google Apps 脚本取消透视表?