2016-12-02 70 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

是的,您是對的。 –