-1

ラムダ関数に問題があり、完全には理解していません。2つのポイント間のマンハッタン距離を計算しようとしています。1つのポイントは現在の場所で、2番目のポイントは複数の位置を含むリストからのものです。どんな助けでもありがたいです、ありがとう

私の機能は次のとおりです。

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:

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バージョンよりも簡単に問題を確認できますか?

于 2013-02-01T01:23:52.547 に答える
0

「ラムダのPython入門」をGoogleで検索することをお勧めします。最初の結果は次のとおりです。これはわかりやすい説明です。

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

于 2013-02-01T01:27:36.840 に答える