Приведение вложенного списка к однородному виду

Рекурсивно обходите вложенные списки, добавляя обычные элементы в новый результат. Не используйте общий список в аргументе по умолчанию.

Короткий ответ

Что ответить на собеседовании

Рекурсивно обходите вложенные списки, добавляя обычные элементы в новый результат. Не используйте общий список в аргументе по умолчанию.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию, принимающую список, в котором могут находиться другие списки любой глубины, и вернуть новый список, где все элементы находятся на одном уровне.

nested_list = [[1, 2, [3, [4, [5]]]], 6, 7, 8]

Функция должна рекурсивно «разворачивать» любые вложенные массивы, сохраняя порядок элементов.

Ответ

Рекурсивно обходите вложенные списки, добавляя обычные элементы в новый результат. Не используйте общий список в аргументе по умолчанию.

def flatten(items):
    result = []
    def visit(sequence):
        for item in sequence:
            if isinstance(item, list):
                visit(item)
            else:
                result.append(item)
    visit(items)
    return result

Для примера получится [1, 2, 3, 4, 5, 6, 7, 8]. Порядок сохраняется; пустые вложенные списки ничего не добавляют. Здесь разворачиваются только list, как требует условие.

Фраза «любой глубины» не отменяет ограничения стека Python: при очень глубокой структуре нужен итеративный обход со стеком итераторов. Самоссылочные списки также требуют обнаружения циклов. Предполагается ациклический вход.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее