Синтаксис понимания списка Python позволяет легко фильтровать значения в понимании. Например:
result = [x**2 for x in mylist if type(x) is int]
Вернет список квадратов целых чисел в mylist. Однако, что, если тест включает некоторые (дорогостоящие) вычисления и вы хотите отфильтровать результат? Один из вариантов:
result = [expensive(x) for x in mylist if expensive(x)]
Это приведет к списку не "ложных" дорогих (x) значений, однако дорогостоящий() вызывается дважды для каждого x. Есть ли синтаксис понимания, который позволяет вам выполнять этот тест, только когда он дорого стоит один раз за x?