python - 按项目中的子字符串拆分列表并保留分隔符

标签 python list split

这是输入:

[
    '@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])]

关于python - 按项目中的子字符串拆分列表并保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307836/

相关文章:

Python - 测试对象是否为内置函数

python - 从python中的列表中删除空字符串

c++通过双换行符拆分字符串

python - 如何使用pyspark从字符串中提取数字格式

python - 仅将 float 列表中的零更改为整数

r - 可以根据输入对象名称创建自己命名的列表吗?

c++ operator new和delete内存泄漏与容器

java - 使用 split 方法将字符串转换为字符

python - 什么是切片集合的pythononic方法?

list - 在 Prolog 中对列表进行分区