python map函数传递多个参数

时间:2013-07-13 14:48:02

标签: list python-2.7 map multiprocessing list-comprehension

首先,我需要在python中使用map函数而不是理解来实现多处理

我的列表理解的初始版本如下

t3List = [x for x in rowCost if ( cost[t1][t2]+cost[rowCost.index(x)][tour[ tour.index(rowCost.index(x)) - 1 ] ]-cost[t2][rowCost.index(x)]-cost[t1][tour[ tour.index(rowCost.index(x)) - 1 ] ]>0 and rowCost.index(x) !=t1 and rowCost.index(x) != t2 and rowCost.index(x) != tour[ tour.index(t2)+1]  and x<cost[t1][t2] ) ]

为了更好地理解t1t2只是顶点。例如t1t2的值分别为34,21。 rowcost是一个列表,其中包含从一个顶点到每个其他顶点的距离。

tour只是我必须旅行的一些顶点顺序(基本上我是在解决tsp)

这里所有变量都是本地的。 cost就像是所有顶点的对称成本矩阵。

对于大量顶点,此列表需要0.5到1秒来计算。所以我计划在看到this

后实施多处理

我理解map函数将第一个参数作为函数。

但要实现上述理解,此函数必须具有多个参数,因为所有变量都是本地的。

如何解决这个问题?任何帮助都非常感激。

2 个答案:

答案 0 :(得分:1)

试试这段代码:

def f(rowCost, x, cost, t1, t2, tour):
    if cost[t1][t2]+cost[rowCost.index(x)][tour[ tour.index(rowCost.index(x)) - 1 ] ]-cost[t2][rowCost.index(x)]-cost[t1][tour[ tour.index(rowCost.index(x)) - 1 ] ]>0 and rowCost.index(x) !=t1 and rowCost.index(x) != t2 and rowCost.index(x) != tour[ tour.index(t2)+1]  and x<cost[t1][t2]:
        return x
    else:
        return None

t3List = filter(None, map(f, rowCost))

我假设rowCost的任何值都不能None为了减少map结果filter

答案 1 :(得分:0)

我认为你想要的是jabaldonedo的答案,除了代替f取代x, cost, t1, t2, tour这些值应该在其他地方定义,它应该只是引用它们。即你的函数应该从许多参数的函数“curry”到一个函数中。

def f(rowCost):
    if <huge boolean expression>:
        return x
    else:
        return None