我有一个多参数函数。我简化了要映射的功能,这是我的测试功能:
def _dist(I,J,X,Y):
return abs(I-X)+abs(J-Y)
在某些情况下,我只想将X,Y保持为常数,并分别对u_x和u_y迭代I,J。我在下面写下了一些内容(同时提出了SyntaxError)
new=map(_dist(,,cur.x(),cur.y()),u_x,u_y)
其中cur.x()和cur.y()是常量。 无论如何用map()做到这一点?
答案 0 :(得分:2)
你能否使用列表理解?
new = [_dist(x,y,i,j) for x in ux for y in uy]
其中i
和j
是您的常量。
请注意,这相当于
new = map(lambda (x,y): _dist(x,y,i,j), [(x,y) for x in ux for y in uy])
但稍短(可能更有效)。
编辑(回应@ chepner的评论) - 如果您想要遍历ux
和uy
的压缩产品,那么您可以
new = [_dist(x,y,i,j) for (x,y) in zip(ux,uy)]
代替。注意区别 -
>> ux = [1, 2, 3]
>> uy = [4, 5, 6]
>> [(x,y) for x in ux for y in uy]
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
>> zip(ux, uy)
[(1, 4), (2, 5), (3, 6)]
答案 1 :(得分:2)
您可以部分应用_dist
:
from functools import partial
_mapfunc = partial(_dist, X=cur.x(), Y=cur.y())
new = map(_mapfunc, u_x, u_y)
尽管克里斯泰勒的名单理解可能更有效率。