假设我们有一个函数add如下所示

def add(x, y):
    return x + y

我们想为数组应用map函数

map(add, [1, 2, 3], 2)

语义是我想给数组的每个元素加2。但是map函数在第三个参数中也需要一个列表。

注意:为了简单起见,我使用了添加示例。原来的函数要复杂得多。当然,在add函数中设置y的默认值是不可能的,因为每次调用都会改变它。


当前回答

#multi argument

def joke(r):
     if len(r)==2:
          x, y = r
          return x + y
     elif len(r)==3:
           x,y,z=r
           return x+y+z

#using map

    print(list(map(joke,[[2,3],[3,4,5]])))

输出= [6,12]

如果像上面的情况,只是想使用功能

def add(x,y):
    ar =[]
    for xx in x:
         ar.append(xx+y)
    return ar
print(list(map(add,[[3,2,4]],[2]))[0])
output = [5,4,6]

注:可以根据需要修改。

其他回答

Map可以包含多个参数,标准方式是

map(add, a, b)

在你的问题中,应该是

map(add, a, [2]*len(a))

如果您有它可用,我会考虑使用numpy。对于这些类型的操作,它非常快:

>>> import numpy
>>> numpy.array([1,2,3]) + 2
array([3, 4, 5])

这是假设您的实际应用程序正在执行数学操作(可以向量化)。

正确答案比你想象的要简单。 只是做的事:

map(add, [(x, 2) for x in [1,2,3]])

并将add的实现更改为接受一个元组,即

def add(t):
   x, y = t
   return x+y

这可以处理任何添加参数都是动态的复杂用例。

def func(a, b, c, d):
 return a + b * c % d
map(lambda x: func(*x), [[1,2,3,4], [5,6,7,8]])

通过用lambda包函数调用并使用星号解包,可以使用任意数量的参数进行map。

将多个参数传递给映射函数。

def q(x,y):
    return x*y

print map (q,range(0,10),range(10,20))

这里q是map()调用的带有多个参数的函数。 确保,两个范围的长度,即。

len (range(a,a')) and len (range(b,b')) are equal.