ドキュメント(または組み込みのヘルプ、またはハウツー) を参照してください。署名list.sort
は次のとおりです。
s.sort([cmp[, key[, reverse]]]) sort the items of s in place (7)(8)(9)(10)
注記では、とりわけ、これらの各パラメーターの意味を説明しています。特に、最初のパラメータcmp
:
2 つの引数 (リスト項目) のカスタム比較関数を指定します
あなたはtoVisit
最初の引数として渡しています。したがって、toVisit
比較関数として使用されます。それが自分の望んでいたことだとは考えられませんでした。したがって、おそらくオブジェクトとドット表記の基本を理解していないので、適切なチュートリアルを読む必要があると思います。(すいません、おすすめできるものはありません。公式の Python チュートリアルを確認しましたが、ドット表記やメソッドとは何かなどはすべて自明であり、説明の必要がないことを前提としているようです…)
正しいバージョンは次のとおりです。
toVisit.sort(key = lambda x: util.manhattanDistance(curr,x))
一方、機能自体には問題がないように見えますが、あなたは 2 つの質問の連続で、あなたが問題を抱えている部分lambda
であると確信しているようです。lambda
で問題が発生した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
バージョンよりも簡単に問題を確認できますか?