суммирование вложенных итераций с помощью map-reduce/itertools


Я застрял с этой структурой данных на некоторое время:

iter([iter([1,0]),iter([1,1]),iter([0,0])])

Я хочу получить сумму самых внутренних элементов, используя map-reduce/itertools.

Я могу получить ответ довольно быстро, используя для петель:

outer_iter = iter([iter([1,0]),iter([1,1]),iter([0,0])])

for inner_iter in outer_iter:
    for inner_list in inner_iter:
        total = total + inner_list

Я изо всех сил пытаюсь "перевести" код.

1 2

1 ответ:

Если данные вложены на два уровня глубоко, мы можем использовать функцию chain для объединения итераций вместе, а затем пусть sum(..) вычислит сумму итераций. Итак:

from itertools import chain

sum(chain.from_iterable(outer_iter))

chain.from_iterable принимает в качестве входных данных iterable из iterables и преобразует его в iterable, который лениво получает элементы из iterables по одному за раз. Мы можем использовать итерационную распаковку на chain, но если внешний итерационный список бесконечен, алгоритм застрянет (и в конечном итоге закончится память).