>>> from itertools import groupby
>>> list_1 = ['>name', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
>>> [''.join(v) for k, v in groupby(list_1, key=lambda s: s.startswith('>'))]
['>name', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
Единственный случай, чтобы наблюдать за вот если у вас нет предметов между знаками >
, для которых требуется простое исправление.
>>> list_1 = ['>name', '>name0', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
>>> [''.join(v) for k,v in groupby(list_1,key=lambda s:s.startswith('>')and s)]
['>name', '>name0', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
Sub Примечание: только в крайне маловероятном случае, что вы можете иметь дубликаты >name
сек как ['>name', '>name', 'aaa'....]
просто изменить and s
к and object()
(который является уникальным) и который обрабатывает все возможные случаи
Я бы использовал 'str.startswith', я думаю. – thefourtheye
@thefourtheye: для теста с 1 символом мне легче использовать 1-значный фрагмент. Я обновлю, так как это может быть просто яснее. –
@ thefourtheye: срез быстрее (вызов метода не требует поиска атрибута и т. Д.), А для теста с фиксированной длиной так же просто. 'str.startswith()' начинает светить, когда вход в метод является динамическим или кортежем. –