[Python] calcolare il valore in corrispondenza del massimo

Piergiuliano Bossi pgbossi a gmail.com
Ven 27 Set 2013 13:26:30 CEST


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

Questa versione funziona, ma il codice fa francamente un po' schifo e la
prossima volta che ho un problema simile dovro' riscrivere tutto.

V2
    def value_at_max(values, functor):
        max_value = None # si usano trucchetti come questo con None o ci
sono modi migliori?
        for value in values:
            if not max_value or functor(value) > functor(max_value):
                max_value = value
        return max_value

    def _max_value(self):
        return value_at_max(self._values, lambda v: v.func())

V2 mi sembra meglio, riutilizzero' value_at_max in altri posti.

C'e' un V3 migliore? Se ci fosse gia' una funzione built-in sarei ancora
piu' contento.
Come la mettiamo in termini "pitonici"? Sto distorcendo il linguaggio in
modo innaturale?

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/f6167911/attachment.html>


Maggiori informazioni sulla lista Python