2013-08-31 2 views
1

I는 두 가지 기능을 가지고두 개의 동시 발생 기능 파이썬

def a(): 
    while True: 
     yield stuff 

def b(): 
    while True: 
     yield otherstuff 

및 I)이 (b위한 (a 위해 저장된 각 기능으로 한 수율 수집 루프) 및 B를 갖고 싶어; 예를 들면. 그들을 호출하는 for 루프를 중첩하면 첫 번째 루프가 반복 될 때마다 2 번째 생성기가 다시 시작됩니다. 이 문제에 대해 도움을받을 수 있습니까?

감사합니다.

답변

6

itertools.izip(...)을 사용하여 값을 압축 할 수 있습니다.

>>> def a(): 
     for i in xrange(10): 
      yield i 


>>> def b(): 
     for i in xrange(10, 20): 
      yield i 


>>> from itertools import izip 
>>> for i, j in izip(a(), b()): 
     print i, j 


0 10 
1 11 
2 12 
3 13 
4 14 
5 15 
6 16 
7 17 
8 18 
9 19 
3
for x, y in zip(a(), b()): 

그것은 단지 동시에 임의의 두 시퀀스에 걸쳐 반복 같아요. (당신은 반복 전에 큰 목록에있는 모든 항목을 수집 피하기 위해 itertools.izip 또는 from future_builtins import zip을 사용할 수 있습니다.)

+0

OP의 의도로 보이는 무한 생성기에서'zip (...) '이 작동하지 않을 것이라고 생각합니다. 내가 틀렸다면 나를 바로 잡아라. :) –

+0

@SukritKalra : 허. 나는 실제로 주어진 발전기를 읽지 않았다. 내가해야 할 것 같아. 그것들은 참으로 무한하기 때문에'izip' 또는 future-zip이 아마도 적절할 것입니다. – user2357112

1

당신은 itertools

from itertools import izip 
z = izip(a(),b()) 

에서 izip을 사용할 수 있습니다 지금 당신이에서 첫 번째 항목을 튜플의 발전기가 a()와 b()의 두 번째

관련 문제