@rsytrade

Как распаковать многомерный список?

Собственно, вопрос - есть многоуровневый список:
list1 = [[['val1',
'val2',
"val3",
'val4',
'val5']],
[['val6', 'val7'],
['val8'],
["val9"],
['val10']]]

Как его оптимально распаковать (получить list2 = ['val1', 'val2', 'val3', 'val4' ...] ). Можно ли это сделать не прибегая (как я делаю сейчас) к многоуровневым циклам, хотелось бы иметь короткую и элегантную альтернативу... )
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
@deliro
Если глубина заранее неизвестна или варьируется, то проще всего сделать рекурсией. А чтобы не тратить лишнюю память, генераторами:
def flatten(x):
    if isinstance(x, list):
        for q in x:
            yield from flatten(q)
    else:
        yield x


>>> list(flatten([1,2,3, [1,2, [3, [[[[4]]]]]]]))
[1, 2, 3, 1, 2, 3, 4]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Zolg
Рекурсия.
Итерируете по всем элементам списка проверяете 'а не список ли текущий элемент', если нет добавляете его к list2, если же да - проводите эту же операцию уже по этому списку
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы