这段代码中的 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])

【讨论】:

minto_visit 返回具有最低distance(path[-1], x)x 元素,而不是距离本身 是的,你是对的。

以上是关于这段代码中的 lambda 函数在做啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

这行 Ruby 代码在做啥? [复制]

这段代码在做啥[重复]

这段代码在做啥?

请解释这段代码在做啥(someChar - 48)

你能告诉我这段代码在做啥吗?

这段代码在做啥。检查两个字符串的字谜