суммирование вложенных итераций с помощью 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 ответ:
Если данные вложены на два уровня глубоко, мы можем использовать функцию
chain
для объединения итераций вместе, а затем пустьsum(..)
вычислит сумму итераций. Итак:from itertools import chain sum(chain.from_iterable(outer_iter))
chain.from_iterable
принимает в качестве входных данных iterable из iterables и преобразует его в iterable, который лениво получает элементы из iterables по одному за раз. Мы можем использовать итерационную распаковку наchain
, но если внешний итерационный список бесконечен, алгоритм застрянет (и в конечном итоге закончится память).