Как получить подмножество списка на основе начального и конечного символов Python - PullRequest
0 голосов
/ 17 сентября 2018

Из существующего списка я хочу иметь возможность получить все элементы между начальной и конечной точкой в ​​новом списке или словаре без использования индексации.Поскольку количество элементов не всегда будет одинаковым, я бы хотел использовать 06 и 1c в качестве начальной и конечной точки.все примеры, которые я видел, касаются разделения строк по индексу

my_list = [
    '06',
    '1d',
    'job=123',
    'var2=213',
    'var3=2312',
    'var4=23124',
    'var5=21453415',
    '1c',

    '06',
    '1d',
    'job=234',
    'var2=213',
    'var3=2312',
    '1c',

    '06',
    '1d',
    'job=345',
    'var2=213',
    'var3=2312',
    'var4=23124',
    'var5=21453415',
    'var6=21453415',
    '1c',

    ]
# THIS WOULD BE COOL
new_list = [

    ['06', '1d', 'job=123', 'var2=213', 'var3=2312', 'var4=23124',  'var5=21453415', '1c'], 
    ['06', '1d', 'job=234', 'var2=213', 'var3=2312', '1c'],
    ['06', '1d', 'job=345', 'var2=213', 'var3=2312', 'var4=23124', 'var5=21453415', 'var6=21453415', '1c']

    ]
# THIS WOULD BE BEST
my_dict = {
    'job=123' : ['06', '1d', 'job=123', 'var2=213', 'var3=2312', 'var4=23124',  'var5=21453415'],
    'job=234' : ['06', '1d', 'job=234', 'var2=213', 'var3=2312', '1c'],
    'job=345' : ['06', '1d', 'job=345', 'var2=213', 'var3=2312', 'var4=23124', 'var5=21453415', 'var6=21453415', '1c']
}

1 Ответ

0 голосов
/ 17 сентября 2018

Начните с поиска местоположений «начальных точек» и «конечных точек» каждой строки:

starts = [i for i, x in enumerate(my_list) if x =='06']
ends   = [i for i, x in enumerate(my_list) if x =='1c']

Теперь выберите фрагменты из исходного списка, которые начинаются в начальной точке и заканчиваются в соответствующей конечной точке (включительно):

[my_list[start:end+1] for start,end in zip(starts, ends)]
#[['06', '1d', 'job=123', 'var2=213', 'var3=2312', 'var4=23124', ..., '1c'], 
# ['06', '1d', 'job=234', 'var2=213', 'var3=2312', '1c'], 
# ['06', '1d', 'job=345', 'var2=213', 'var3=2312', ..., '1c']]

На самом деле нет необходимости включать '1c' s в исходный список, если между строками нет пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...