Со встроенными copy.deepcopy
и itertools.count
magic :
(входной начальный список не мутированный )
from itertools import count
from copy import deepcopy
def indexer(lst):
counter = count(1)
def _visit(lst):
for i, v in enumerate(lst):
if isinstance(v, list):
_visit(v)
else:
lst[i] = next(counter)
return lst
return _visit(deepcopy(lst))
x = ['a', 'b', ['c', ['d', 'e']], 'f']
print(indexer(x))
Выход:
[1, 2, [3, [4, 5]], 6]
Еще один тестовый случай:
x = [['g', 'h'], 'a', [['i', 'k'], 'l'], ['m', 'p', ['o']], 'b', ['c', ['d', 'e']], 'f']
print(indexer(x))
Выход:
[[1, 2], 3, [[4, 5], 6], [7, 8, [9]], 10, [11, [12, 13]], 14]