On Fri, Sep 27, 2013 at 8:06 AM, Marco Beri <marcob...@gmail.com> wrote:
> 2013/9/27 Piergiuliano Bossi <pgbo...@gmail.com> > >> 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? >> >> Diciamo che ogni oggetto nella collezione _values implementa un metodo >> func() che ritorna un valore confrontabile. >> >> V1 >> def _max_value(self): >> max_value = self._values[0] # facciamo finta che la la >> collezione e' per definizione non vuota e ogni valore e' significativo >> for i in range(1, len(self._values)): >> >> if self._values[i].func() > max_values.func(): >> max_value = self._values[i] >> return max_value >> > > Questo non è pythonico (e c'è un errore max_value.func() senza "s"). > Bene, sono contento che anche secondo voi sia una fetecchia. Nello specifico, e' per via dell'iterazione sul range anziche' sui valori? > > Meglio: > > def _max_value(self): > max_value = self._values[0] > for value in self._values: > if value.func() > max_value.func(): > max_value = value > return max_value > > Tu saresti contento cosi' o andresti per V3? > Comunque mi auguro che func() non sia pesante computazionalmente perché lo > ricalcoli ogni volta per max_value. > > Si', giusta osservazione. > Io userei questo: > > V3 > max_value = values[max((value.func(), i) for i, value in > enumerate(values))[1]] > > Questo mi piace ASSAI! :) Penso che lo wrappero' comunque in una funzioncina per ricordarmi cosa caspita fa. > Se lo vuoi un po' più leggibile: > > V3b > max_value_value, index = max((value.func(), i) for i, value in > enumerate(values)) > max_value = values[index] > > Si', grazie. Ciao Giuliano -- Piergiuliano Bossi Blog: http://thinkingbox.wordpress.com/ Twitter: http://twitter.com/thinkingbox (English) Twitter: http://twitter.com/scatolapensante (Italiano) Google+: https://plus.google.com/u/0/108187981162465525118
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python