Можно ли добавить предложение 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 ]

. Есть ли другой способ сделать его более питоническим и читабельным?


Обновление

Скоро в Python 3.8! ПКП

# 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]

22
задан balki 13 December 2018 в 20:02
поделиться