两个Python生成器中的常见项

时间:2012-01-26 21:12:58

标签: python generator

有没有办法在两个Python生成器中查找公共项目,除了将一个读入列表?你不能假设有关物品的顺序。

作为一个不好的例子:

import random
a = (random.randint(1, 50000) for _ in xrange(300))
b = (random.randint(3500, 3700) for _ in xrange(50))      

# do A and B have any elements in common?

1 个答案:

答案 0 :(得分:4)

如果您无法对项目的顺序进行任何假设,那么如果不将其中一个生成器完全读入list(或set可能会使其成为逻辑,则无法在逻辑上执行此操作如果你不关心一个发电机内的重复,那就更有意义了。

为了说明这一点,我们假设只有两个相同的元素是一个生成器的第一个项目和另一个生成器的最后一个项目(但你不知道哪个是哪个)。你需要完全耗尽其中一个发生器,以确保你知道哪些常见元素。

如何使用set s执行此操作:

>>> import random
>>> a = (random.randint(1, 50000) for _ in xrange(300))
>>> b = (random.randint(3500, 3700) for _ in xrange(50))
>>> set(a).intersection(set(b))
set([])
>>> a = (random.randint(1, 50000) for _ in xrange(300))
>>> b = (random.randint(3500, 3700) for _ in xrange(50))
>>> set(a).intersection(set(b))
set([3634])