Разбивать список на подсписки при каждом появлении элемента, начиная с определенной подстроки - PullRequest
0 голосов
/ 01 июля 2019

У меня большой список, который содержит кучу строк.Мне нужно отсортировать элементы исходного списка во вложенный список, определяемый их расположением в списке.Другими словами, мне нужно разбить исходный список на подсписки, где каждый подсписок содержит все элементы, попадающие между элементами, начинающимися с 'ABC', а затем соединить их вместе как вложенный список.

Итак, оригиналсписок:

all_results = ['ABCAccount', 'def = 0', 'gg = 0', 'kec = 0', 'tend = 1234567890', 'ert = abc', 'sed = target', 'id = sadfefsd3g3g24b24b', 'ABCAccount', 'def = 0', 'gg = 0', 'kec = 0', 'tend = NA', 'ert = abc', 'sed = source', 'id = sadfefsd3g3g24b24b', 'ABCAdditional', 'addkey = weds', 'addvalue = false', 'ert = abc', 'sed = target', 'id = sadfefsd3g3g24b24b', 'time_zone = EDT’]

И мне нужно вернуть:

split_results = [['ABCAccount','def = 0', 'gg = 0', 'kec = 0', 'tend = 1234567890', 'ert = abc', 'sed = target', 'id = sadfefsd3g3g24b24b'],['ABCAccount', 'def = 0', 'gg = 0', 'kec = 0', 'tend = NA', 'ert = abc', 'sed = source', 'id = sadfefsd3g3g24b24b'],['ABCAdditional', 'addkey = weds', 'addvalue = false', 'ert = abc', 'sed = target', 'id = sadfefsd3g3g24b24b', 'time_zone = EDT’]]

Я пробовал следующее:

split_results = [l.split(',') for l in ','.join(all_results).split('ABC')]

1 Ответ

1 голос
/ 01 июля 2019

Вы можете напрямую работать с исходным списком:

def make_split( lst ):
    if len(lst) == 0:
        return []
    r0 = []
    r1 = []
    for s in lst:
        if s.startswith("ABC"):
            if r1:
                r0.append(r1)
                r1 = []
        r1.append(s)
    return r0 + [r1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...