[Python] calcolare il valore in corrispondenza del massimo

Piergiuliano Bossi pgbossi a gmail.com
Ven 27 Set 2013 15:23:32 CEST


On Fri, Sep 27, 2013 at 8:06 AM, Marco Beri <marcoberi a gmail.com> wrote:

> 2013/9/27 Piergiuliano Bossi <pgbossi a 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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130927/0d80bfda/attachment.html>


Maggiori informazioni sulla lista Python