Синтаксис генератора списков Python упрощает фильтрацию значений внутри генератора. Например:
Код: Выделить всё
result = [x**2 for x in mylist if type(x) is int]
Вернет список квадратов целых чисел в моем списке. Однако что, если тест включает в себя некоторые (дорогостоящие) вычисления и вы хотите отфильтровать результат? Один из вариантов:
Код: Выделить всё
result = [expensive(x) for x in mylist if expensive(x)]
Это приведет к появлению списка не «ложных» значений дорогих(х), однако дорогой() вызывается дважды для каждого х. Существует ли синтаксис понимания, который позволяет вам выполнять этот тест, вызывая дорогой только один раз за x?
Подробнее здесь:
https://stackoverflow.com/questions/130 ... prehension