Рекурсивно обходите вложенные списки, добавляя обычные элементы в новый результат. Не используйте общий список в аргументе по умолчанию.
Приведение вложенного списка к однородному виду
Рекурсивно обходите вложенные списки, добавляя обычные элементы в новый результат. Не используйте общий список в аргументе по умолчанию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, принимающую список, в котором могут находиться другие списки любой глубины, и вернуть новый список, где все элементы находятся на одном уровне.
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: при очень глубокой структуре нужен итеративный обход со стеком итераторов. Самоссылочные списки также требуют обнаружения циклов. Предполагается ациклический вход.