Эффективность здесь вообще не при чем.
Генератор - это синтаксический сахар
То есть вопрос вообще не про эффективность
вот ей-богу, какая-то болезнь что ли.
у вас любая функция оценивается только по одному признаку - "эффективность"! Какая быстрее - такая и лучше.
всё, других критериев нет. и наоборот - если кто-то где-то насвистел что одна функция "эффективнее" другой - то всё, везде используется только эта, вопреки логике и здравому смыслу. потому что эффективнее же!
Но на самом деле бывают и другие критерии.
У генератора есть одно однозначно полезное применение - возможность создания унифицированных интерфейсов.
Любой потоковый источник он может превратить в перебираемый.
То есть можно наплодить интерфейсов и скармливать их какому-нибудь форичу, и он будет с ними работать, не зная, поток внутри, или массив. Файл, результат запроса из БД, раскодированный джейсон - если в каждого из этих источников будет перебираемый интерфейс, то все их можно будет перебирать в одном и том же цикле.
И вот ради такой унификации и используется генератор