我想问一下在比较两个生成器时使用==
的情况。
例如:
x = ['1','2','3','4','5']
gen_1 = (int(ele) for ele in x)
gen_2 = (int(ele) for ele in x)
gen_1和gen_2在实际上是相同的,但是当我进行比较时:
>>> gen_1 == gen_2
False
我的猜测是这里的==
被处理得像通常的 is
一样,而且由于gen_1和gen_2存储在不同的内存位置:
>>> gen_1
<generator object <genexpr> at 0x01E8BAA8>
>>> gen_2
<generator object <genexpr> at 0x01EEE4B8>
他们的比较结果为False
。我的猜测是正确的吗?欢迎分享任何其他见解。
顺便说一句,我知道如何比较两个生成器:
>>> all(a == b for a,b in zip(gen_1, gen_2))
True
或者甚至更多
>>> list(gen_1) == list(gen_2)
True
但是如果有更好的方法,我很乐意知道。
==
只会比较对象标识。如果您在生成器上进行迭代,通常情况下可能会导致无限循环。 - Gulzarall(a == b for a,b in zip(gen_1, gen_2))
的。 - Luka Rahne