考虑迭代器count(3,3)
和count(5,5)
。如何创建仅输出count(3,3)
和count(5,5)
中出现的数字的迭代器?
答案 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