我在使用 lambda 函数时遇到了问题,并且没有真正完全理解它。我正在尝试计算两点之间的曼哈顿距离,1 点是当前位置,第二点来自包含多个位置的列表。任何帮助表示赞赏,谢谢
我的功能是:
toVisit.sort(toVisit,key = lambda x: util.manhattanDistance(curr,x))
我试图从 toVisit 列表中获取一个值,但不知道如何准确。我正在考虑将 x 与当前位置一起传递,但这不起作用。
查看文档(或内置帮助,或操作方法。签名为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: EXPR
为good_name_for_what_expr_does
。
因此,这相当于您的原始代码:
def manhattanDistanceFromCurr(x):
return util.manhattanDistance(curr, x)
toVisit.sort(toVisit, key = manhattanDistanceFromCurr)
你能比在lambda
版本中更容易地看到那里的问题吗?
我建议您在 Google 上搜索“Python 对 lambda 的介绍”。这是第一个结果,这是一个很好的解释:
http://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/