【问题标题】:using a conditional and lambda in map在地图中使用条件和 lambda
【发布时间】:2015-09-18 02:51:58
【问题描述】:

如果我想获取一个数字列表并执行以下操作:

lst = [1,2,4,5]
[1,2,4,5] ==> ['lower','lower','higher','higher']

其中3是使用map函数的条件,有没有简单的方法?

很明显map(lambda x: x<3, lst) 让我非常接近,但我怎么能在 map 中包含一个允许我立即返回字符串而不是布尔值的语句?

【问题讨论】:

    标签: python dictionary lambda conditional-statements


    【解决方案1】:
    >>> lst = [1,2,4,5]
    >>> map(lambda x: 'lower' if x < 3 else 'higher', lst)
    ['lower', 'lower', 'higher', 'higher']
    

    除此之外:通常更喜欢为此使用列表推导

    >>> ['lower' if x < 3 else 'higher' for x in lst]
    ['lower', 'lower', 'higher', 'higher']
    

    【讨论】:

    • 是的,我想如何通过列表理解来做到这一点没问题,但由于某种原因,当我在我的地图中使用 if 语句时不断出错。非常感谢!!!
    • 供将来参考...这不适用于numpy.array 使用numpy.where
    • 所以其他人知道兼容性,这似乎是在 Python 2.5 中添加的conditional expressions。这在我使用的 Python 2.3 中不可用。
    • @JoshDetwiler,Python2.3 的开放选项是 [('higher', 'lower')[x &lt; 3] for x in lst]。但它更难阅读,并且评估两个选项(在这里并不重要,因为它们只是字符串)
    • @Ansh,它形成了一个三元 - 所以需要所有 3 个部分。如果你想过滤['lower' for x in lst if x &lt; 3],你可以用通常的方式在最后写条件
    【解决方案2】:

    三元运算符:

    map(lambda x: 'lower' if x<3 else 'higher', lst)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多