Как распаковать многомерный список?
Если глубина заранее неизвестна или варьируется, то проще всего сделать рекурсией. А чтобы не тратить лишнюю память, генераторами:
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]
Рекурсия.
Итерируете по всем элементам списка проверяете 'а не список ли текущий элемент', если нет добавляете его к list2, если же да - проводите эту же операцию уже по этому списку