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

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

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

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

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




Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: