Me pregunto sobre el uso de ==
cuando se comparan dos generadoresLa comparación de dos generadores en Python
Por ejemplo:
x = ['1','2','3','4','5']
gen_1 = (int(ele) for ele in x)
gen_2 = (int(ele) for ele in x)
gen_1 y gen_2 son los mismos para todos los propósitos prácticos, y sin embargo, cuando los comparo:
>>> gen_1 == gen_2
False
Supongo que es ==
aquí se trata como is
normalmente, y desde gen_1 y gen_2 están situados en diferentes lugares de la memoria:
>>> gen_1
<generator object <genexpr> at 0x01E8BAA8>
>>> gen_2
<generator object <genexpr> at 0x01EEE4B8>
su comparación se evalúa como False
. ¿Estoy en lo cierto en esta suposición? Y cualquier otra idea es bienvenida.
Y por cierto, yo no sé cómo comparar dos generadores:
>>> all(a == b for a,b in zip(gen_1, gen_2))
True
o incluso
>>> list(gen_1) == list(gen_2)
True
Pero si hay una manera mejor, me gustaría saber.
Piense en una expresión de generador como si fuera una función, no como una lista. – agf
una vez que compara los generadores los agota y luego se vuelven vacíos –