Tienes iteradores confundidos con generadores.
Su primer ejemplo es una expresión de iterador de lista, mientras que el segundo es una expresión generadora. La diferencia clave es que el generador crea cada miembro de la colección dada de forma perezosa (según sea necesario) en lugar de con entusiasmo (a la vez, sea necesario o no). Puede definir sus propios generadores utilizando el rendimiento en lugar del retorno.
En cuanto al uso, desea un iterador cuando necesita la lista (o diccionario o lo que sea) para algo en sí mismo. Usaría un generador cuando la colección sea incidental al producto final. Por ejemplo, puede usar un generador para obtener una lista de números que satisfacen algunos criterios de otros criterios. No le importa la lista original, solo los miembros que cumplen con los criterios. Por lo tanto, utiliza un generador para obtener solo esos números.
Un ejemplo más concreto sería encontrar los ángulos de triángulos cuyos lados tienen una longitud dada. No queremos todos los triángulos fallidos pobres y deformados, solo los triángulos exitosos fuertes y saludables. Por lo tanto, usaríamos un generador.
Esta publicación de desbordamiento de pila entra en más detalles.