联合两个迭代器

时间:2010-11-12 03:14:23

标签: python

考虑迭代器count(3,3)count(5,5)。如何创建仅输出count(3,3)count(5,5)中出现的数字的迭代器?

1 个答案:

答案 0 :(得分:1)

为了回答这个问题,OP在评论中接受(x for x in count(3) if not x%3 or not x%5)作为解决方案。只要重复是可接受的,下面的内容应适用于一般情况。如果重复项不可接受,则可以将其包装在一个函数中,该函数将其输出存储在一个集合中以供进一步参考,但现在我们对它最终的总大小进行假设。


一种方法就是将两者交错。这假设它们都具有相同的心率。这也会产生重复,如评论中所指出的那样。

import itertools

def union(it1, it2):
    return (item for pair in itertools.izip(it1, it2) for item in pair)

如果他们有不同的心态,那么你最终会截断其中一个。这是一个更通用的解决方案

import itertools

def union(it1, it2):
    it1, it2 = iter(it1), iter(it2)
    for item in (item for pair in itertools.izip(it1, it2) for item in pair):
        yield item
    for it in (it1, it2):
        for item in it:
            yield item