两个Python生成器中的公共项

两个Python生成器中的公共项,python,generator,Python,Generator,除了将一个Python生成器读入列表之外,还有没有其他方法可以在两个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? 如果您不能对项

除了将一个Python生成器读入列表之外,还有没有其他方法可以在两个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?

如果您不能对项目的顺序进行任何假设,那么在逻辑上,如果不将其中一个生成器完全读入
列表(或
集合
,如果您不关心一个生成器中的重复项,那么这可能更有意义),您就无法这样做

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

如何使用
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])

如果您不能对项目的顺序进行任何假设,那么在逻辑上,如果不将其中一个生成器完全读入
列表(或
集合
,如果您不关心一个生成器中的重复项,那么这可能更有意义),您就无法这样做

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

如何使用
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])

也许您可以编辑这个,然后发布更多的信息和一些代码?定义“common”。你是在问如何找到两个生成器之间的联合吗?我更新了这个问题以使其更清楚。也许你可以编辑这个问题,并发布更多的信息和一些代码?定义“common”。你是在问如何找到这两台发电机之间的联合体吗?我更新了这个问题以使它更清楚。