2016-12-02 37 views
0

我对贪婪执行旅行商问题有以下代码。我无法将这个代码中lambda函数的功能包裹起来。在此代码中执行的lambda函数是什么?

def distance(p1, p2): 
    return ((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2) ** 0.5 

def tsp_greedy(points, start=None): 
    if start is None: 
     start = points[0] 
    to_visit = points 
    path = [start] 
    to_visit.remove(start) 
    while to_visit: 
     closest = min(to_visit, key=lambda x: distance(path[-1], x)) 
     path.append(closest) 
     to_visit.remove(closest) 
    return path 

我意识到它正在创建一个x传入的匿名函数。但我不确定传递给这个函数的是什么。什么是x?

+1

x是'to_visit'迭代中的每个值。 'min()'为每个值计算'key'值,'key'函数的值最低时返回值。 –

+1

这个答案解决你的问题吗? http://stackoverflow.com/a/18296814/406423 – MadMike

+0

它遍历路径中的所有项目,将当前正在访问的项目作为x传递,并与路径中的下一个路径进行比较(如路径[-1]) 获得最小距离。 – SerialDev

回答

0

closest变得to_visit[i]使得

distance(path[-1], to_visit[i]) = 
    min(distance(path[-1], to_visit[0]), distance(path[-1], to_visit[1]), ...) 

换句话说,lambda函数使得比较不通过to_visit[i]而是由distance(path[-1], to_visit[i])

+0

'min'从'to_visit'返回'距离(路径[-1],x)最低'的x元素,而不是距离本身 – vaultah

+0

是的,您是对的。 –