2016-06-23 11 views
1

最小値を見つける方法についてはmy question answeredが得られましたが、最小オブジェクトが必要な場合はどうなりますか?同様にこのコードを単純化できますか?Python特別なコンパレータを使用して最小オブジェクトを見つける

 min = 9999 
     minChild = None 
     for child in currentRoot.children:    
      if child.score < min: 
       min = child.score 
       minChild = child 
      recurseWriteBook(child, depth+1) 
+1

が壊れたあなたの再帰ですか? 'recurse ...()'関数を呼び出し、何も返さず、グローバル変数を宣言せず、関数から戻り値を取得しません。 minChild.scoreを見ていくつかの行を削除することができ、 'min'(あなたのリンクされた質問では使用しないことをお勧めした名前、btw)は保持しませんが、すべてを見ることなくすべてを単純化できるかどうかは分かりませんそれの。しかし、ネストされた構造体では 'min()'を自明に使うことはできません。 – TessellatingHeckler

+0

いいえ、すべてが機能していますが、min = 9999を1 << 31に上げる必要がありますが、関数を変更してもはや再帰的ではないように思えます。 。私がミニマックスのときと同じように、私は葉ノードを必要としないので、それを進めるのはもっと簡単だと思った。関数全体に興味があれば、ここにいます:http://pastebin.com/xVue2i5c – Josh

答えて

1

使用組み込み関数min(iterable[, key])

>>> class Foo(object): 
...  def __init__(self, value): 
...   self.value = value 
... 
>>> 
>>> l = [Foo(2), Foo(1), Foo(3)] 
>>> 
>>> 
>>> min_foo = min(l, key = lambda x: x.value) 
>>> 
>>> min_foo.value 
1 

オブジェクトの比較に使用するkey /属性を指定します。

0

はあなたのタイプ(リスト/タプルを)知っているし、それらをどのように調整するので、あなた は、このように技術を使用することができます。

list_min = [1,2,3,4] # list to demonstrate 

m = lambda mn,lst: filter(lambda x: x <mn,lst) # get the minimum out of list 

minimum = 3 # test value 
print m(minimum,list_min) 
0

私は私が選択した回答を使用し、プラス、この使用するために私の他の質問からの回答:

minChild = min(currentRoot.children, key = lambda child: child.score) 
+0

さらに深くツリーに進むために私の関数を呼び出す必要があります。 – Josh

関連する問題