Python:如何在多维数组/列表上使用map()而不使用lambda函数?

5

我有一些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)

2
不使用函数参数时,使用高阶函数map、filter和reduce的用例是什么? - Adam Mihalcin
3个回答

5

我认为没有任何理由不使用lambda表达式或列表推导式,但是以下是一些需要注意的事项:

import operator,functools
a = map(functools.partial(map, functools.partial(operator.or_, b)), a)

请注意,functools.partiallambda 类似,因此在我看来正确的答案是“不行”,就像 @senderle 已经写过的那样:https://dev59.com/A2HVa4cB1Zd3GeqPkCpw#9561602。关于 functools.partiallambda 的区别:https://dev59.com/b3A75IYBdhLWcg3wg5Zh#3252425。 - Marco Sulla

4

mapfilterreduce都需要函数(或者至少是可调用对象——即任何具有__call__方法的对象)作为参数。因此,你必须定义一个函数或一个类来完成这个任务。


或者,显而易见地说,使用在其他地方定义的内置函数。 - senderle

1

不幸的是,Python没有简洁的柯里化语法,因此您无法像map(b |, x)那样做。

我只会使用列表推导式:

[y | b for x in a for y in x]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接