【问题标题】:Equivalent of Haskell List comprehension example in Python等效于 Python 中的 Haskell 列表理解示例
【发布时间】:2020-04-10 20:31:01
【问题描述】:

我想知道learnyouahaskell.com 中的以下List comprehension 示例是否可以在Python 中复制:

[ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x]   

我尝试了类似的方法,但无法在 Python 的 List Comprehension 中获得与 else 等效的路径:

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

【问题讨论】:

  • 你可以写 ["BOOM!"如果 x

标签: python list haskell list-comprehension


【解决方案1】:

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

[<b>"BOOM!" if x &lt; 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!"]

【讨论】:

    【解决方案2】:

    您可以将 if-else 作为由推导式评估的表达式

    ['BOOM!' if x < 10 else 'BANG!' for x in range(7, 13)]
    

    【讨论】:

      【解决方案3】:

      像这样移动它:

      ["BOOM!" if x < 10 else "BANG!" for x in range(7,13) ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 1970-01-01
        • 2014-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多