2

지금 잠시 동안이 데이터 구조로 붙어 봤는데 :중첩 된 반복 가능 객체를 합산/itertools지도-감소

나는지도-감소하여 가장 안쪽 요소의 합계 싶어
iter([iter([1,0]),iter([1,1]),iter([0,0])]) 

/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 

.

+0

무엇을 시도 했습니까? –

+0

iterables를 중첩 * 임의 * 깊게 만들거나 2 단계 만 중첩시킬 수 있습니까? –

답변

2

데이터가 두 가지 수준의 깊은, 우리는 함께 반복 가능 객체을 연결하는 chain 기능을 사용하고 sum(..)이 반복자의 합계를 계산하도록 할 수 있습니다 중첩됩니다. 그래서 :

from itertools import chain 

sum(chain.from_iterable(outer_iter))

chain.from_iterable 입력으로 반복 가능 객체의 반복 가능한 걸리고, 반복 가능 객체로 지연 한 번에 하나의 요소를 구하기위한 반복 가능한로이를 변환한다. chain에서 반복 가능한 언 패킹을 사용할 수 있지만 외부 반복 가능이 무한한 목록 인 경우 알고리즘이 중단되어 결국 메모리가 부족합니다.

+0

내가이 코드를 가지고 놀았을 때 알아 차린 것 : https://stackoverflow.com/questions/29403401/python-for-loop-and-iterator-behavior – lainglo

+0

@lainglo : 예, 반복기가 실제로 소비되었습니다. 그러나 이터레이터를 사용하지 않는 방법은 없습니다. 'tee' 등을 사용하면 (공유 메모리를 사용하여) 두 개의 반복자를 생성 할 수 있습니다. –