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']]