python 中的地图和比较
Map and comparison in python
假设我有一个列表:
foo_list = ["foo", None, "bar", 1, 0, None]
我想将此列表转换为布尔列表,说明哪些元素是 None
,例如
results = [False, True, False, False, False, True]
一个简单的 map
和 lambda
就可以了:
list(map(lambda a: a==None, foo_list))
但我想知道是否可以删除 lambda,并使其更简单,大致如下:
list(map((==None), foo_list))
这显然会引发错误,但其他函数式语言通常允许将运算符作为函数使用,而且从技术上讲,这个函数甚至没有柯里化(因为它具有所需的所有参数)。
编辑:我知道 Python
中的列表推导,这可以作为 [(a==None) for a in foo_list]
解决,但这不是我的问题。
我会说列表理解是 Pythonic 的方式,但如果你真的想,你可以这样做
import functools
import operator
foo_list = ["foo", None, "bar", 1, 0, None]
print(list(map(functools.partial(operator.is_, None), foo_list)))
假设我有一个列表:
foo_list = ["foo", None, "bar", 1, 0, None]
我想将此列表转换为布尔列表,说明哪些元素是 None
,例如
results = [False, True, False, False, False, True]
一个简单的 map
和 lambda
就可以了:
list(map(lambda a: a==None, foo_list))
但我想知道是否可以删除 lambda,并使其更简单,大致如下:
list(map((==None), foo_list))
这显然会引发错误,但其他函数式语言通常允许将运算符作为函数使用,而且从技术上讲,这个函数甚至没有柯里化(因为它具有所需的所有参数)。
编辑:我知道 Python
中的列表推导,这可以作为 [(a==None) for a in foo_list]
解决,但这不是我的问题。
我会说列表理解是 Pythonic 的方式,但如果你真的想,你可以这样做
import functools
import operator
foo_list = ["foo", None, "bar", 1, 0, None]
print(list(map(functools.partial(operator.is_, None), foo_list)))