Python, изменение массива

Python, необходимо перевести одномерный массив в многомерный по определённому символу, например(допустим по символу 'n'):

Было:

['255', '123', '15', 'n', '233', '109', '45', 'n', '10', '89', '3']

Стало:

[['225', '123', '15'], ['233', '109', '45'], ['10', '89', '3']]

Причем, надо, чтобы можно было переводить по любому количеству разделителей (n)


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

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

некрасивый вариант в лоб с возможностью некорректной работы из-за данных несоответствующих типов (не строки):

data = ['255', '123', '15', 'n', '233', '109', '45', 'n', '10', '89', '3']

res = [[i for i in obj.split(',') if i != ''] for obj in ','.join(data).split('n')]

print(res)

корректное решение в лоб:

data = ['255', '123', '15', 'n', '233', '109', '45', 'n', '10', '89', '3']

res = []
tmp = []

for i in range(len(data)):
    if data[i] == 'n':
        if tmp != []:
            res.append(tmp)
        tmp = []
    else:
        tmp.append(data[i])

if tmp != []:
    res.append(tmp)

print(res)

чуть-чуть покороче решение:

res = []
tmp = []

for obj in data:
    if obj == 'n':
        res += [tmp] if tmp else []
        tmp = []
    else:
        tmp.append(obj)

res += [tmp] if tmp else []

ну и пока самый короткий и немного извращённый вариант, который пришел в голову:

res, tmp = [], []

for obj in data:
    res, tmp = (res + [tmp] if tmp else [], []) if obj == 'n' else (res, tmp + [obj])

res += [tmp] if tmp else []
→ Ссылка
Автор решения: A_Vaclav
def n2_list(arr, ch):
    res = []
    tmp = []
    for x in arr:
        if x != ch:
            tmp.append(x)
        else:
            res.append(tmp)
            tmp = []
    else:
        res.append(tmp)
    return res

arr = ['255', '123', '15', 'n', '233', '109', '45', 'n', '10', '89', '3']
ch = 'n'
print(n2_list(arr, ch))

'>>>[['255', '123', '15'], ['233', '109', '45'], ['10', '89', '3']]

→ Ссылка