Как список строк преобразовать по определенному признаку?

Дан список строк, в котором некоторые значения заканчиваются на '/'. Нужно такие значения и следующее за ними объединить в общую строку. Пример:

['0.3/', '1.2/', '1.2/', '1.2', '11']

Результат:

['0.3/1.2/1.2/1.2', '11]

Строки с слешем могут быть как в начале, так в середине, так и в конце строки. Последний символ строки не заканчивается слешем


Ответы (3 шт):

Автор решения: insolor

Делаете переменную, в которую доклеиваете строки, если предыдущая строка заканчивалась на слэш. Если предыдущая строка не заканчивалась на слэш, добавляете все склеенные значения в выходной список, или выводите через yield в генераторе:

def join_slashes(s: list):
    accumulator = ''
    
    for item in s:
        if accumulator and not accumulator.endswith('/'):
            yield accumulator
            accumulator = ''
        
        accumulator += item
    
    yield accumulator


print(list(join_slashes(['0.3/', '1.2/', '1.2', '1.2/', '1.3', '11'])))

Через накопление в списке вместо генератора:

def join_slashes(s: list):
    result = []
    accumulator = ''
    
    for item in s:
        if accumulator and not accumulator.endswith('/'):
            result.append(accumulator)
            accumulator = ''
        
        accumulator += item
    
    result.append(accumulator)
    return result


print(join_slashes(['0.3/', '1.2/', '1.2', '1.2/', '1.3', '11']))

Вывод в обоих вариантах:

['0.3/1.2/1.2', '1.2/1.3', '11']
→ Ссылка
Автор решения: strawdog
lst = ['0.3/', '1.2/', '1.2', '1.2/', '1.3', '11']
res = [x.lstrip(",") for x in "/,".join(lst).replace("//,",",").split("/")]

res:

['0.3,1.2,1.2', '1.2,1.3', '11']
→ Ссылка
Автор решения: CrazyElf

Ну раз выкладывают уже код и я выложу. Без отдельного аккумулятора, достаточно текущего списка.

lst_in = ['0.3/', '1.2/', '1.2/', '1.2', '11']
lst_out = []
for x in lst_in:
    if lst_out and lst_out[-1].endswith('/'):
        lst_out[-1] += x
    else:
        lst_out.append(x)
print(lst_out)

Или вариант через zip:

lst_in = ['0.3/', '1.2/', '1.2/', '1.2', '11']
lst_out = []
for curr,prev in zip(lst_in, ['']+lst_in):
    if prev.endswith('/'):
        lst_out[-1] += curr
    else:
        lst_out.append(curr)
print(lst_out)
→ Ссылка