Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:map()带有部分参数_Python - Fatal编程技术网

Python:map()带有部分参数

Python:map()带有部分参数,python,Python,我得到了一个多参数函数。我简化了要映射的函数,下面是我要测试的函数: def _dist(I,J,X,Y): return abs(I-X)+abs(J-Y) 在某些情况下,我只想保持X,Y为常数,分别在u_X和u_Y上迭代I,J。我在下面写了一些东西(SyntaxError提出时) 其中cur.x()和cur.y()是常量。 无论如何,要用map()来做这件事?您不能使用列表理解吗 new = [_dist(x,y,i,j) for x in ux for y in uy] 其中,

我得到了一个多参数函数。我简化了要映射的函数,下面是我要测试的函数:

def _dist(I,J,X,Y):
    return abs(I-X)+abs(J-Y)
在某些情况下,我只想保持X,Y为常数,分别在u_X和u_Y上迭代I,J。我在下面写了一些东西(SyntaxError提出时)

其中cur.x()和cur.y()是常量。
无论如何,要用map()来做这件事?

您不能使用列表理解吗

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)]

您可以部分应用
\u dist

from functools import partial
_mapfunc = partial(_dist, X=cur.x(), Y=cur.y())
new = map(_mapfunc, u_x, u_y)

尽管Chris Taylor的列表理解可能更有效。

您希望将
ux
uy
压缩在一起;您的代码迭代的是
ux
uy
的笛卡尔积。@chepner我以为这就是目的
map(func,L1,L2)
相当于
[func(L1[0],L2[0]),func(L1[1],L2[1]),…,func(L1[-1],L2[-1])]
啊,好吧-我读到了短语“迭代I,J于u_x和u_y”,这对我来说是笛卡尔积。我忽略了代码,因为OP承认他们不知道自己在做什么;)
from functools import partial
_mapfunc = partial(_dist, X=cur.x(), Y=cur.y())
new = map(_mapfunc, u_x, u_y)