首先,我需要在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] ) ]
为了更好地理解t1
和t2
只是顶点。例如t1
,t2
的值分别为34,21。
rowcost
是一个列表,其中包含从一个顶点到每个其他顶点的距离。
tour
只是我必须旅行的一些顶点顺序(基本上我是在解决tsp)
这里所有变量都是本地的。 cost
就像是所有顶点的对称成本矩阵。
对于大量顶点,此列表需要0.5到1秒来计算。所以我计划在看到this
后实施多处理我理解map函数将第一个参数作为函数。
但要实现上述理解,此函数必须具有多个参数,因为所有变量都是本地的。
如何解决这个问题?任何帮助都非常感激。
答案 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