<div dir="ltr">On Fri, Sep 27, 2013 at 8:06 AM, Marco Beri <span dir="ltr"><<a href="mailto:marcoberi@gmail.com" target="_blank">marcoberi@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">2013/9/27 Piergiuliano Bossi <span dir="ltr"><<a href="mailto:pgbossi@gmail.com" target="_blank">pgbossi@gmail.com</a>></span><br>
<div class="gmail_extra"><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div>Ciao a tutti, un altro quesito della Susy: data una funzione e una collezione, come fate a calcolare il valore in corrispondenza del quale la funzione e' massimizzata?</div><div><br></div><div>Diciamo che ogni oggetto nella collezione _values implementa un metodo func() che ritorna un valore confrontabile.</div>
<div><br></div><div>V1</div><div> def _max_value(self):</div><div> max_value = self._values[0]<span style="white-space:pre-wrap"> </span># facciamo finta che la la collezione e' per definizione non vuota e ogni valore e' significativo</div>
<div> for i in range(1, len(self._values)): </div><div> if self._values[i].func() > max_values.func():</div><div> max_value = self._values[i]</div><div>
return max_value</div></div></blockquote><div><br></div></div><div>Questo non è pythonico (e c'è un errore max_value.func() senza "s").</div></div></div></div></blockquote><div><br></div><div>Bene, sono contento che anche secondo voi sia una fetecchia. Nello specifico, e' per via dell'iterazione sul range anziche' sui valori?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br>Meglio:</div><div><br></div><div>
<div class="im"><div> def _max_value(self):</div>
<div> max_value = self._values[0]</div></div><div> for value in self._values:</div><div> if value.func() > max_value.func():</div><div class="im"><div> max_value = value</div><div>
return max_value</div>
</div></div><div><br></div></div></div></div></blockquote><div><br></div><div>Tu saresti contento cosi' o andresti per V3?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div>Comunque mi auguro che func() non sia pesante computazionalmente perché lo ricalcoli ogni volta per max_value.</div><div class="im"><div><br>
</div></div></div></div></div></blockquote><div><br></div><div>Si', giusta osservazione.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">
<div class="gmail_extra"><div class="gmail_quote"><div>Io userei questo:</div><div><br></div><div>V3</div><div> max_value = values[max((value.func(), i) for i, value in enumerate(values))[1]]<br>
</div><div><br></div></div></div></div></blockquote><div><br></div><div>Questo mi piace ASSAI! :)</div><div>Penso che lo wrappero' comunque in una funzioncina per ricordarmi cosa caspita fa.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div>Se lo vuoi un po' più leggibile:</div><div><br></div><div>V3b</div><div><div> max_value_value, index = max((value.func(), i) for i, value in enumerate(values))<br>
</div></div><div> max_value = values[index]<br>
</div><div><br></div></div></div></div></blockquote><div><br></div><div>Si', grazie.</div><div><br></div><div>Ciao</div><div>Giuliano </div></div><div><br></div>-- <br>Piergiuliano Bossi<br>Blog: <a href="http://thinkingbox.wordpress.com/" target="_blank">http://thinkingbox.wordpress.com/</a><br>
Twitter: <a href="http://twitter.com/thinkingbox" target="_blank">http://twitter.com/thinkingbox</a> (English)<br>Twitter: <a href="http://twitter.com/scatolapensante" target="_blank">http://twitter.com/scatolapensante</a> (Italiano)<br>
<div>Google+: <a href="https://plus.google.com/u/0/108187981162465525118" target="_blank">https://plus.google.com/u/0/108187981162465525118</a></div>
</div></div>