Код: Выделить всё
[f(x) for x in l if f(x)]
I хочу избежать вычисления f(x) дважды для каждого непустого появления f(x). Есть ли какой-нибудь способ сохранить его вывод в рамках понимания списка?
Я мог бы удалить последнее условие, сгенерировать весь список, а затем сократить его, но это кажется расточительным.Было предложено два основных подхода:
Понимание внутреннего генератора:
Код: Выделить всё
[y for y in (f(x) for x in l) if y]
Я думаю, что понимание внутреннего генератора элегантно подходит для решения поставленной проблемы. На самом деле я упростила вопрос, чтобы было понятно, очень хочу:
Код: Выделить всё
[g(x, f(x)) for x in l if f(x)]
Подробнее здесь: https://stackoverflow.com/questions/158 ... evaluation