Рекурсивно суммируйте вложенные списки, а числовые листья добавляйте напрямую. Однако произвольная глубина ограничена стеком Python: для очень глубокой структуры нужен итеративный обход.
Рекурсивный подсчёт суммы элементов в вложенных списках
Рекурсивно суммируйте вложенные списки, а числовые листья добавляйте напрямую. Однако произвольная глубина ограничена стеком Python: для очень глубокой структуры нужен итеративный обход.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию f, которая суммирует все числовые значения, находящиеся в переданных списках, независимо от уровня их вложенности. Функция должна принимать произвольное количество списков‑аргументов и возвращать общую сумму всех найденных чисел.
Пример использования:
- Ввод: f([10, 21, 33], [14, 52], [7, 81, [9, 100]]) Вывод: 327
- Ввод: f([3, [5, 6], 15, [5, 51]], [7, 81, [9, 100]]) Вывод: 282
- Ввод: f([3, [5, [10, 15, [5, 6], 6], 61, [5, 5], 8]]) Вывод: 129
Обратите внимание, что списки могут быть вложены произвольной глубины, а функция должна корректно обрабатывать любые комбинации вложенных и плоских списков.
Ответ
Рекурсивно суммируйте вложенные списки, а числовые листья добавляйте напрямую. Однако произвольная глубина ограничена стеком Python: для очень глубокой структуры нужен итеративный обход.
Короткая рекурсивная версия:
def f(*lists):
def visit(value):
if isinstance(value, list):
return sum(visit(item) for item in value)
return value
return sum(visit(value) for value in lists)
Примеры дают 327, 282 и 129; пустой вход — 0. Предполагаются ациклические списки с числовыми листьями. Эта реализация линейна по размеру структуры, но при большой глубине получит RecursionError. Если «произвольная глубина» — жёсткое требование, замените рекурсивные вызовы явным стеком итераторов, а не увеличивайте бесконтрольно лимит рекурсии.