两个迭代器的并集
考虑一下这两个迭代器 count(3,3)
和 count(5,5)
。我该如何创建一个迭代器,只输出出现在 count(3,3)
和 count(5,5)
中的数字呢?
1 个回答
1
为了给这个问题一个答案,提问者在评论中接受了(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