等效于 Python 中的 Haskell 列表理解示例

Chr*_*raf 0 python haskell list-comprehension list

我想知道List comprehension来自learnyouahaskell.com的以下示例是否可以复制到Python

[ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x]   
Run Code Online (Sandbox Code Playgroud)

我尝试了这样的事情,但无法获得else与 Python 列表理解中的工作路径等效的路径:

["BOOM!" for x in range(7,13) if x < 10] # else "BANG!"
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 7

这不是过滤,而是放在列表推导式的yield部分的三元运算符。但是有一个过滤器:odd x部分,因此您应该if x % 2 == 1在列表理解的末尾添加一个过滤器:

["BOOM!" if x < 10 else "BANG!" for x in range(7,13) if x % 2 == 1]
Run Code Online (Sandbox Code Playgroud)

在 Python 中,这给了我们:

>>> ["BOOM!" if x < 10 else "BANG!" for x in range(7,13) if x % 2 == 1]
['BOOM!', 'BOOM!', 'BANG!']
Run Code Online (Sandbox Code Playgroud)

这在 Haskell 中是等价的:

Prelude> [ if x < 10 then "BOOM!" else "BANG!" | x <- [7 .. 12], odd x]  
["BOOM!","BOOM!","BANG!"]
Run Code Online (Sandbox Code Playgroud)