【问题标题】: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 函数具有最低值的值。
  • 这个答案能解决你的问题吗? stackoverflow.com/a/18296814/406423
  • 它遍历路径中的所有项目,将当前访问的项目作为 x 传递,并与路径中的下一个项目(作为路径 [-1])进行比较以获得最小距离。跨度>
  • @MadMike 好发现

标签: python lambda


【解决方案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 元素,而不是距离本身
  • 是的,你是对的。
猜你喜欢
  • 2014-08-18
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 2018-03-14
  • 2016-08-02
  • 1970-01-01
  • 2016-05-31
  • 2016-09-26
相关资源
最近更新 更多