【问题标题】:Map and comparison in pythonpython中的映射和比较
【发布时间】:2020-09-29 22:03:21
【问题描述】:

假设我有一个清单:

foo_list = ["foo", None, "bar", 1, 0, None]

我想将此列表转换为布尔列表,说明哪些元素是None,例如

results = [False, True, False, False, False, True]

一个简单的maplambda 就可以了:

list(map(lambda a: a==None, foo_list))

但我想知道我是否可以删除 lambda,并使其更简单,类似于:

list(map((==None), foo_list))

这显然会引发错误,但其他函数式语言通常允许将运算符作为函数,从技术上讲,这个函数甚至没有柯里化(因为它具有所需的所有参数)。

编辑:我知道Python 中的列表推导,这可以通过[(a==None) for a in foo_list] 解决,但这不是我的问题。

【问题讨论】:

  • 在 FP 中,运算符只是中缀表示法中的一个函数,具有预定义的优先级和关联性。您已在伪代码示例中部分应用了==,所以是的,它被柯里化了。

标签: python lambda functional-programming map-function


【解决方案1】:

我会说列表推导是 Pythonic 的方式,但如果你真的想要,你可以这样做

import functools
import operator
foo_list = ["foo", None, "bar", 1, 0, None]
print(list(map(functools.partial(operator.is_, None), foo_list)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2010-09-18
    • 2015-11-03
    • 2018-04-08
    • 2023-03-28
    • 2011-08-10
    相关资源
    最近更新 更多