python - 按项目中的子字符串拆分列表并保留分隔符
问题描述
这是输入:
[
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'Some_String',
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'@imp_Some_String',
'Some_String',
'Some_String'
]
这是所需的输出
[
[
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'Some_String'
],
[
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String'
],
[
'@imp_Some_String',
'Some_String',
'Some_String'
]
]
这个想法是如果我尝试过的项目拆分列表,startswith('@imp')
但我的解决方案会在这里创建 x,y 问题。
谢谢。
解决方案
使用简单的迭代
前任:
data = [
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'Some_String',
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'@imp_Some_String',
'Some_String',
'Some_String'
]
result = []
for i in data: #Iterate items
if i.startswith("@"): #Check if item startswith "@"
result.append([i]) #Append new list with item
else:
result[-1].append(i) #Append item to previous list
print(result)
输出:
[['@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'Some_String'],
['@imp_Some_String', 'Some_String', 'Some_String', 'Some_String'],
['@imp_Some_String', 'Some_String', 'Some_String']]
使用itertools.groupby
前任:
from itertools import groupby
data = [
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'Some_String',
'@imp_Some_String',
'Some_String',
'Some_String',
'Some_String',
'@imp_Some_String',
'Some_String',
'Some_String'
]
data = [list(v) for _, v in groupby(data, lambda x: x.startswith("@"))]
result = [i + v for i, v in zip(data[0::2], data[1::2])]
推荐阅读
- php - 无法运行从 php 到 linux 的命令
- amazon-web-services - Terraform aws - 将更改用于创建同名 s3 存储桶的模块删除 s3 存储桶并重新创建它
- css - 将 2 个块渲染为单个元素
- c - 即使在 select() 以可读的服务器套接字返回后,客户端上的 SSL_read() 也会阻塞
- c++ - 使用 OpenCV C++ RaspberryPi 的慢速 FPS
- vba - VBA:用户定义类型作为公共对象模块中的事件参数
- android - 如何防止 Android 模拟器断开代理 Wifi
- amazon-lightsail - Lightsail 自定义 DNS
- android - 如何从手机/手机传递一些信息来佩戴操作系统并将其显示在 android wear os 模拟器中?
- html - 必填字段显示占位符,而非必填字段不显示