У меня есть список вида
[
[0, 'a'],
[0, 'b'],
[0, 'c'],
[1, 'd'],
[1, 'e'],
[2, 'f'],
[2, 'g'],
[0, 'h'],
[0, 'i']
]
Мне нужно его привести к следующему виду:
[
'a',
'b',
'c',
[
'd',
'e',
[
'f',
'g'
]
],
'h',
'i'
]
(для лучшей читаемости оформил отступами)
В сторону чего мне рыть? По itertools прошелся, но ничего полезного там не нашел.
Помните, я вчера спрашивал решения одной задачки? Мне посоветовали рекурсию. А один знакомый JS-ник взял и предложил красивый вариант без рекурсии, и я считаю, он достоин того, чтобы вы его увидели.
Переведено с JS:
def unflatten(result):
li = result[0][0]
final = [[]]
for i in range(len(result)):
if result[i][0] == li:
final[-1].append(result[i][1])
elif result[i][0] > li:
while result[i][0] > li:
final.append([])
li += 1
final[-1].append(result[i][1])
else:
while result[i][0] < li:
final[-2].append(final.pop())
li -= 1
final[-1].append(result[i][1])
li = result[i][0]
return final[0]