Python:带有部分参数的map()

时间:2015-08-11 14:36:44

标签: python

我有一个多参数函数。我简化了要映射的功能,这是我的测试功能:

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()做到这一点?

2 个答案:

答案 0 :(得分:2)

你能否使用列表理解?

new = [_dist(x,y,i,j) for x in ux for y in uy]

其中ij是您的常量。

请注意,这相当于

new = map(lambda (x,y): _dist(x,y,i,j), [(x,y) for x in ux for y in uy])

但稍短(可能更有效)。

编辑(回应@ chepner的评论) - 如果您想要遍历uxuy的压缩产品,那么您可以

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)
尽管克里斯泰勒的名单理解可能更有效率。