Это не фильтрация, а троичный оператор, который вы вводите в yield части понимания списка. Однако есть фильтр: часть odd x
, поэтому вы должны добавить фильтр if x % 2 == 1
в конце списка:
[<b>"BOOM!" if x < 10 else "BANG!"</b> for x in range(7,13) if x % 2 == 1]
В Python это дает нам:
>>> ["BOOM!" if x < 10 else "BANG!" for x in range(7,13) if x % 2 == 1]
['BOOM!', 'BOOM!', 'BANG!']
Что эквивалентно в Haskell:
Prelude> [ if x < 10 then "BOOM!" else "BANG!" | x <- [7 .. 12], odd x]
["BOOM!","BOOM!","BANG!"]