Você confundiu iteradores com geradores.
Seu primeiro exemplo é uma expressão de iterador de lista, enquanto o segundo é uma expressão de gerador. A principal diferença é que o gerador cria cada membro da coleção fornecida preguiçosamente (conforme necessário) e não ansiosamente (ao mesmo tempo, se necessário ou não). Você pode definir seus próprios geradores usando rendimento em vez de retorno.
Quanto ao uso, você deseja um iterador quando precisar da lista (ou dicionário ou qualquer outra coisa) para algo por si só. Você usaria um gerador quando a coleta é incidental para o produto final. Por exemplo, você pode usar um gerador para obter uma lista de números que atendem a alguns critérios de outros critérios. Você não se importa com a lista original, apenas com os membros que se enquadram nos critérios. Assim, você usa um gerador para obter apenas esses números.
Um exemplo mais concreto seria encontrar os ângulos dos triângulos cujos lados têm um determinado comprimento. Não queremos todos os pobres, deformados triângulos fracassados, apenas os triângulos fortes e saudáveis de sucesso. Assim, usaríamos um gerador.
Esta postagem Stack Overflow entra em mais detalhes.