2016-12-14 5 views
1

私は可能な引数のリストをソートするためのキーとして使用したいフィットネス関数(与えられた引数の組に対してtrueまたはfalseのみを返す)を持っています。通常、私はのような何かを行うことができると思いますが:私はソートを使用する方法ではもちろん追加のパラメータを使用してカスタムメソッドをソートする?

def fitnessFunction(arg1, arg2, f): 
    return f(*arg1) < f(*arg2) 

sorted(possibleArguments, key = fitnessFunction) 

ここproblesは私の適合関数は次のように見えることですフィットネスの計算に使用する関数は既知であり、ソート中に変更されませんが、何とかしてPythonに伝えることができますか?

どうすればいいですか?

+0

もしそうなら、そのクラスに '__gt__'、' __lt__'、 '__eq__'関数を書いて比較を行うことができます。 – Brobin

+0

@Brobinうん、彼らはそれぞれ同じ数の浮動小数点数の単純なタプルです – Straightfw

+0

ええと、クラスにラップすると、それらのメソッドを使うことができます。 – Brobin

答えて

5

keyは、比較機能を使用しません。リストの要素を比較可能な項目に変換します。

BTW Python 3のsortに比較関数を渡すことはできなくなりました(そして、__cmp__メソッドもオブジェクトから削除されています)ので、使い慣れたほうが面倒です(同じ場合は0を返さなければならなかった)より小さい場合は負、大きい場合は正、小さい場合はstrcmpのように、複雑な比較関数を作成できますが、不安定であることがわかります。

幸いなことに、f()の機能は十分です。

あなたは自分の場合にはこれを実行する必要があります:

sorted(possibleArguments, key = lambda x : f(*x)) 

比較はsort機能によって行われます。不要です 'arg1`と `arg2`オブジェクトは同じ型ですか?fitnessFunction

+0

おっと、あなたは絶対に正しいです!どうもありがとう :) – Straightfw

関連する問題