2012-07-18 66 views
1

如何合并两个不同的生成器,在每次迭代中,一个不同的生成器将获得收益?如何合并两台发电机?

>>> gen = merge_generators_in_between("ABCD","12") 
>>> for val in gen: 
...  print val 
A 
1 
B 
2 
C 
D 

我该如何做到这一点?我在itertools中找不到它的功能。

回答

7

照照itertools recipes循环赛

>>> from itertools import cycle, islice 
>>> def roundrobin(*iterables): 
     "roundrobin('ABC', 'D', 'EF') --> A D E B F C" 
     # Recipe credited to George Sakkis 
     pending = len(iterables) 
     nexts = cycle(iter(it).next for it in iterables) 
     while pending: 
      try: 
       for next in nexts: 
        yield next() 
      except StopIteration: 
       pending -= 1 
       nexts = cycle(islice(nexts, pending)) 


>>> for x in roundrobin("ABCD", "12"): 
     print x 


A 
1 
B 
2 
C 
D