【发布时间】:2017-04-17 15:11:54
【问题描述】:
我有以下代码用于贪婪地实现旅行商问题。我无法理解 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是什么?
【问题讨论】:
-
x 是
to_visit可迭代的每个值。min()为每个值计算key值,返回key函数具有最低值的值。 -
这个答案能解决你的问题吗? stackoverflow.com/a/18296814/406423
-
它遍历路径中的所有项目,将当前访问的项目作为 x 传递,并与路径中的下一个项目(作为路径 [-1])进行比较以获得最小距离。跨度>
-
@MadMike 好发现