Задачи с кодом

Распаковка вложенных списков

Кодинг-марафон. Задача 8.

Напишите функцию flatten, которая будет принимать на вход список с любой вложенностью (список в списке), а также второй параметр — глубину распаковки.

Функция должна вернуть список, где вложенные элементы соответствующего уровня распакованы, то есть вложенное превращается в плоское.

Если второй аргумент не передан, функция должна вернуть одномерный список, то есть все вложенные списки должны быть распакованы.

Сигнатура: def flatten(a_list:list, depth:int=0)->list

Примечания

  • Функция не должна бросать исключений!
  • Предполагается, что глубина распаковки всегда положительна (если указана).
  • Если параметр глубины больше реальной вложенности, то функция просто распаковывает все списки, как если бы глубина не была передана.
  • Предполагается, что могут быть только вложенные списки (не кортежи или другие контейнеры).

Примеры

flatten([1, [2, 3]]) == [1, 2, 3]
flatten([1, [2, [3]]], depth=1) == [1, 2, [3]]
flatten([1, [2, [3]]], depth=2) == [1, 2, 3]
flatten([1, [2, 3]], depth=100) == [1, 2, 3]

Варианты решения

def flatten(a_list: list, depth: int = 0) -> list:
    count = 0
    while True:
        result = []
        has_list = False
        for element in a_list:
            if type(element) is list:
                result.extend(element)
                has_list = True
            else:
                result.append(element)
        a_list = result
        count += 1
        if not has_list or (0 < depth == count):
            break
    return result
def flatten(a_list: list, depth: int = -1) -> list:
    result = []
    for element in a_list:
        if depth == 0 or type(element) is not list:
            result.append(element)
        else:
            result.extend(flatten(element, depth - 1))
    return result

Марина

Recent Posts

10 удалённых Python-вакансий

Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…

6 месяцев ago

Где искать Python-вакансии в 2026 году: зачем на Talanto.work появился отдельный сценарий поиска

Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…

6 месяцев ago

Срезы в Python со всеми подробностями

Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…

8 месяцев ago

Возведение в степень в Python: полное руководство

В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…

9 месяцев ago

Как удалить дубликаты из списка Python?

Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…

9 месяцев ago

Виртуальный (shared) хостинг от SpaceWeb: технический обзор

Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…

11 месяцев ago