栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

比较Python中的两个生成器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

比较Python中的两个生成器

您的猜测是正确的-未定义类型比较的后备结果

==
是基于对象标识的比较。

比较它们生成的值的更好方法是

from itertools import izip_longest, teesentinel = object()all(a == b for a, b in izip_longest(gen_1, gen_2, fillvalue=sentinel))

实际上,这可能会短路,而不必一定要查看所有值。正如larsmans在评论中所指出的,我们不能

izip()
在这里使用,因为如果生成器生成不同数量的元素,
izip()
它将在最短的迭代器上停止,从而产生错误的结果。我们将新创建的
object
实例用作的填充值
izip_longest()
,因为
object
实例也通过对象标识
sentinel
进行比较,因此可以保证与其他实例不相等。

请注意,在不更改生成器状态的情况下无法比较生成器。如果以后需要它们,可以存储消耗的物品:

gen_1, gen_1_teed = tee(gen_1)gen_2, gen_2_teed = tee(gen_2)all(a == b for a, b in izip_longest(gen_1, gen_2, fillvalue=sentinel))

这将使离开状态,

gen_1
并且
gen_2
基本上保持不变。消耗的所有值
all()
都存储在
tee
对象内部。

到那时,您可能会问自己,为手头的应用程序使用惰性生成器是否真的值得-最好将它们简单地转换为列表并使用列表。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661018.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号