Можно ли добавить предложение where с пониманием списка?
Рассмотрим следующее понимание списка
[ (x,f(x)) for x in iterable if f(x) ]
Это фильтрует итерацию на основе условияf
и возвращает парыx,f(x)
, Проблема с этим подходомf(x)
рассчитывается дважды.
Было бы здорово, если бы мы могли писать как
[ (x,fx) for x in iterable if fx where fx = f(x) ]
or
[ (x,fx) for x in iterable if fx with f(x) as fx ]
Но в Python мы должны писать с использованием вложенных пониманий, чтобы избежать повторного вызова f (x), и это делает понимание менее ясным
[ (x,fx) for x,fx in ( (y,f(y) for y in iterable ) if fx ]
Есть ли другой способ сделать его более питонным и читабельным?
Update
Скоро в Python 3.8!PEP
# Share a subexpression between a comprehension filter clause and its output
filtered_data = [y for x in data if (y := f(x)) is not None]