2013-06-26 2 views
0

목록 목록이 있으며 모든 목록의 모든 요소에 대한 반복자를 가져 오려고합니다.여러 목록에 대한 파이썬 반복자

나의 생각은 두 변수를 가진 클래스를 작성하는 것이다. 목록에 대한 반복자와 현재 내부 목록에 대한 반복문. 내부 목록 반복자가 StopIteration을 발생시킬 때마다 외부 목록 반복자에서 다음에 호출합니다. 이 일을하는 나의 방법은 다음 함수에서 많은 중첩 된 if를 포함하므로이 일을 수행하는 파이썬 방법이 무엇인지 묻고 있습니다.

예 :

lists = [[1, 2].__iter__(), [3, 4].__iter__()] 

는 지금은 반복 2, 3, 4, 1을 통해 내가 함께 일하고 있어요리스트의 난 단지 반복자를 사용할 수있는 매우 큰 때문에 반복자 객체가 필요합니다.

+1

당신을 요구하고 ['itertools.chain'] (http://docs.python.org/2/library/itertools.html#itertools.chain)? – BrenBarn

+0

나는 따라 가지 않는다. 지금 가지고있는 코드를 게시하십시오. –

답변

4

사용 itertools.chain.from_iterable() :

from itertools import chain 

for elem in chain.from_iterable(nested_list): 

데모 :

>>> from itertools import chain 
>>> nested_list = [['a', 'b'], ['c', 'd']] 
>>> for elem in chain.from_iterable(nested_list): 
...  print elem, 
... 
a b c d 
1

사용 izip : izip(*nested)하거나 '우편'

* 연산자는 인수가 개봉되어 파이썬 3.x를에있는 경우 연산자를 사용하면 튜플이나 목록이 문을 통해 '확산'될 수 있습니다. 이것의 또 다른 예는 다음과 같습니다

list = (1, 2, 3, 4, 5) 

a, *bcd, e = list # a=1, bcd=[2,3,4] and e=5