这段代码中的 lambda 函数在做啥? [复制]
Posted
技术标签:
【中文标题】这段代码中的 lambda 函数在做啥? [复制]【英文标题】:What is the lambda function doing in this code? [duplicate]这段代码中的 lambda 函数在做什么? [复制] 【发布时间】: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
函数具有最低值的值。
这个答案能解决你的问题吗? ***.com/a/18296814/406423
它遍历路径中的所有项目,将当前访问的项目作为 x 传递,并与路径中的下一个项目(作为路径 [-1])进行比较以获得最小距离。跨度>
@MadMike 好发现
【参考方案1】:
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])
。
【讨论】:
min
从to_visit
返回具有最低distance(path[-1], x)
的x
元素,而不是距离本身
是的,你是对的。以上是关于这段代码中的 lambda 函数在做啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章