Lambda函数Python

Lambda函数Python,python,algorithm,sorting,lambda,Python,Algorithm,Sorting,Lambda,我在lambda函数方面遇到了问题,并没有完全理解它。我试图计算两点之间的曼哈顿距离,1点是当前位置,第二点来自包含多个位置的列表。非常感谢您的帮助,谢谢 我的职能是: toVisit.sort(toVisit,key = lambda x: util.manhattanDistance(curr,x)) 我试图从ToVisite列表中获取一个值,但不知道如何准确地获取。我想用curr位置传递x,但这不起作用。查看(或内置帮助,或)。list.sort的签名是: s.sort([cmp[, k

我在lambda函数方面遇到了问题,并没有完全理解它。我试图计算两点之间的曼哈顿距离,1点是当前位置,第二点来自包含多个位置的列表。非常感谢您的帮助,谢谢

我的职能是:

toVisit.sort(toVisit,key = lambda x: util.manhattanDistance(curr,x))
我试图从ToVisite列表中获取一个值,但不知道如何准确地获取。我想用curr位置传递x,但这不起作用。

查看(或内置帮助,或)。list.sort的签名是:

s.sort([cmp[, key[, reverse]]]) sort the items of s in place    (7)(8)(9)(10)
注释解释了这些参数的含义。特别是第一个参数,
cmp

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

您将
toVisit
作为第一个参数传递。因此,
toVisit
将被用作比较函数。您不可能认为这是您想要的。因此,我猜您可能不了解对象和点符号的基本知识,您需要阅读适当的教程。(对不起,我没有推荐的方法。我检查了,但似乎认为点符号、方法是什么等等都很明显,不需要解释……)

以下是正确的版本:

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

同时,
lambda
函数本身似乎没有任何问题,但您似乎确信,
lambda
是您遇到问题的部分。如果您遇到
lambda
的问题,最简单的方法是将其转换为一个正常命名的函数这是一件小事

如果你有这个:

lambda ARGS: EXPR
在其上方的一行中执行此操作:

def good_name_for_what_expr_does(ARGS):
    return EXPR
然后,将
lambda ARGS:EXPR
替换为
good\u name\u,以了解\u EXPR\u的作用

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

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

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

我建议你在谷歌上搜索“Python introduction to lambda”。这里是第一个结果,这是一个很好的解释:


您从何处获取curr?除非
toVisit
是一种非常不寻常的类型,否则不应将其作为第一个参数传递给
toVisit.sort
。它不需要自身的副本。我已经解释过,在对.curr的注释中,它是从参数中给出的,作为pacman的当前位置,(x,y)这个列表包含了4个角的位置,形式是(x,y)@abarnert,是的,我看到了,但不明白你的意思我们希望看到这样的代码:
something.sort()
我们不希望看到像你这样的代码:
something.sort(something)
在Python中,对象上的方法函数不需要对传递到调用中的对象的引用。我能想到的唯一地方就是普通C代码。