Python:在多维数组/列表上使用不带lambdas的map()

时间:2012-03-05 04:17:47

标签: python lambda functional-programming

我在python中有一些代码,它在一个名为

的多维列表中的所有值上按位或等于b
for i in xrange(len(a)):
    for j in xrange(len(a[i])):
        a[i][j] |= b

我的问题是,有没有办法只使用(map(),filter(),reduce())来编写这段代码,而不必使用lambdas或任何其他函数定义,如下例所示

map(lambda x: map(lambda y: y | b, x), a)

3 个答案:

答案 0 :(得分:4)

mapfilterreduce都将函数(或至少是callables - 即任何带有__call__方法的函数)作为参数。所以基本上没有。您必须定义一个函数或类。

答案 1 :(得分:4)

我完全没有理由为什么人们应该避免使用lambdas或列表理解,但是这里有:

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

答案 2 :(得分:0)

不幸的是,Python没有简洁的语法,所以你不能做map(b |, x)之类的事情。

我只想使用列表推导:

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