除了将一个生成器读入列表之外,是否有办法在两个 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?
最佳答案
如果您不能对项目的顺序做出任何假设,那么如果不将其中一个生成器完全读入 list
(或 set
如果您不关心一个生成器中的重复项,这可能更有意义)。
为了说明这一点,我们假设仅有的两个相同元素是一个生成器的第一项和另一个生成器的最后一项(但您不知道哪个是哪个)。您需要完全耗尽其中一个生成器,以确保您知道其中有哪些公共(public)元素。
如何使用 set
实现:
>>> 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])
关于python - 两个 Python 生成器中的公共(public)项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9025419/