-1

我在使用 lambda 函数时遇到了问题,并且没有真正完全理解它。我正在尝试计算两点之间的曼哈顿距离,1 点是当前位置,第二点来自包含多个位置的列表。任何帮助表示赞赏,谢谢

我的功能是:

toVisit.sort(toVisit,key = lambda x: util.manhattanDistance(curr,x))

我试图从 toVisit 列表中获取一个值,但不知道如何准确。我正在考虑将 x 与当前位置一起传递,但这不起作用。

4

2 回答 2

1

查看文档(或内置帮助,或操作方法。签名为list.sort

s.sort([cmp[, key[, reverse]]]) sort the items of s in place    (7)(8)(9)(10)

除其他外,这些注释解释了每个参数的含义。特别是,第一个参数cmp

指定两个参数的自定义比较函数(列表项)

toVisit作为第一个参数传递。因此,toVisit将用作比较函数。你不可能想到那是你想要的。所以,我猜你可能不了解对象和点符号的基础知识,你需要阅读适当的教程。(对不起,我没有推荐的。我查看了官方的Python教程,但似乎假设点符号,以及方法是什么等等都是显而易见的,不需要解释......)

这是正确的版本:

toVisit.sort(key = lambda x: util.manhattanDistance(curr,x))

同时,lambda函数本身似乎没有任何问题,但您似乎在连续两个问题中确信这lambda是您遇到问题的部分。如果你在使用 a 时遇到问题lambda,最简单的方法是将其转换为普通的命名函数,这很容易做到。

你有这个:

lambda ARGS: EXPR

在它上面做一行:

def good_name_for_what_expr_does(ARGS):
    return EXPR

然后,将 替换lambda ARGS: EXPRgood_name_for_what_expr_does

因此,这相当于您的原始代码:

def manhattanDistanceFromCurr(x):
    return util.manhattanDistance(curr, x)
toVisit.sort(toVisit, key = manhattanDistanceFromCurr)

你能比在lambda版本中更容易地看到那里的问题吗?

于 2013-02-01T01:23:52.547 回答
0

我建议您在 Google 上搜索“Python 对 lambda 的介绍”。这是第一个结果,这是一个很好的解释:

http://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/

于 2013-02-01T01:27:36.840 回答