python - 两个 Python 生成器中的公共(public)项目

标签 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?

最佳答案

如果您不能对项目的顺序做出任何假设,那么如果不将其中一个生成器完全读入 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/

相关文章:

JavaScript,从多个数组中获取所有唯一的组合

python - 关闭 urllib2 连接

python - 替换 bing 搜索的 url 中的变量

python - multiprocessing_generator 模块触发权限错误

javascript - 测试代码覆盖 javascript es6 生成器 (redux-saga/istanbul.js)

python - 谁能帮我找出我写的素数生成器函数中的错误

python - 如何在 python 中使用带有元组的生成器表达式

python - 带迭代的二维字典

python - 为 pygame 混音器设置输出设备

python - 多处理与线程 Python