我有一些Python代码,它将b按位或等于a这个多维列表中所有的值
for i in xrange(len(a)):
for j in xrange(len(a[i])):
a[i][j] |= b
我的问题是,是否有办法仅使用(map()、filter()、reduce())来编写此代码,而不必像下面的示例中那样使用lambda或任何其他函数定义
map(lambda x: map(lambda y: y | b, x), a)
我有一些Python代码,它将b按位或等于a这个多维列表中所有的值
for i in xrange(len(a)):
for j in xrange(len(a[i])):
a[i][j] |= b
我的问题是,是否有办法仅使用(map()、filter()、reduce())来编写此代码,而不必像下面的示例中那样使用lambda或任何其他函数定义
map(lambda x: map(lambda y: y | b, x), a)
我认为没有任何理由不使用lambda表达式或列表推导式,但是以下是一些需要注意的事项:
import operator,functools
a = map(functools.partial(map, functools.partial(operator.or_, b)), a)
functools.partial
与 lambda
类似,因此在我看来正确的答案是“不行”,就像 @senderle 已经写过的那样:https://dev59.com/A2HVa4cB1Zd3GeqPkCpw#9561602。关于 functools.partial
和 lambda
的区别:https://dev59.com/b3A75IYBdhLWcg3wg5Zh#3252425。 - Marco Sullamap
、filter
和reduce
都需要函数(或者至少是可调用对象——即任何具有__call__
方法的对象)作为参数。因此,你必须定义一个函数或一个类来完成这个任务。
不幸的是,Python没有简洁的柯里化语法,因此您无法像map(b |, x)
那样做。
我只会使用列表推导式:
[y | b for x in a for y in x]