Функция для подсчёта суммы всех чисел в вложенных списках

Обойдите числовые листья вложенных списков и сложите их. Чтобы не зависеть от предела рекурсии Python, можно хранить стек итераторов: он занимает память пропорционально глубине вложения.

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

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

Обойдите числовые листья вложенных списков и сложите их. Чтобы не зависеть от предела рекурсии Python, можно хранить стек итераторов: он занимает память пропорционально глубине вложения.

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

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

Условие

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

Примеры вызова:

total_sum([10, 21, 33], [14, 52], [7, 81, [9, 100]]) → 327

total_sum([3, [5, 6], 15, [5, 51]], [7, 81, [9, 100]]) → 282

total_sum([3, [5, [10, 15, [5, 6], 6], 61, [5, 5], 8]]) → 129

Ответ

Обойдите числовые листья вложенных списков и сложите их. Чтобы не зависеть от предела рекурсии Python, можно хранить стек итераторов: он занимает память пропорционально глубине вложения.

Итеративный обход ациклических списков:

def total_sum(*lists):
    total = 0
    stack = [iter(lists)]
    while stack:
        try:
            item = next(stack[-1])
        except StopIteration:
            stack.pop()
            continue
        if isinstance(item, list):
            stack.append(iter(item))
        else:
            total += item
    return total

Пустые списки дают вклад 0. Для примеров результаты 327, 282 и 129. Предполагаются числовые листья с совместимым сложением; строки вызовут ошибку. Циклические ссылки на списки условием не предусмотрены и требуют отдельной защиты. Время линейно по числу посещённых элементов.

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

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

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

Подробнее