[pyar] Eiliminando if .. else

Martin Alejandro Castro Álvarez martincastro.10.5 en gmail.com
Jue Feb 22 13:39:27 -03 2018


Y esta es una solución un poco mas limpia con la misma idea de multiplicar
y no dividir, pero que falla únicamente cuando a/b=3 (que solucioné creando
un intervalo desde 3.00001). El beneficio es que podés agregarle más
intervalos.

INTERVALS = ((3.000001, 2), (1, 1), (0.1, 1), (0, 0))

def scalable(a, b):
    for i in INTERVALS:
        if a >= i[0] * b:
            return i[1]
    return 0


2018-02-22 13:29 GMT-03:00 Martin Alejandro Castro Álvarez <
martincastro.10.5 at gmail.com>:

> Multiplicar lo hace muchas veces más rápido que dividir:
>
> def fast(a, b):
>     if not b:
>         return r4
>     if a > 3 * b:
>         return r4
>     if a >= b:
>         return r3
>     if a < 0.1 * b:
>         return r1
>     return r2
>
>
> 2018-02-22 12:01 GMT-03:00 Luis Andraschnik <luis.andraschnik at gmail.com>:
>
>> Hola Lucio
>> Esta es más complicada, lo tengo que tomar con dos vasos de agua :)
>> Saludos!
>> Luis
>>
>>
>> El 22 de febrero de 2018, 11:33, Lucio <lucionardelli at gmail.com>
>> escribió:
>>
>>> Bunas,
>>>
>>> Muy buena la de *bisect*! No la tenía, te queda mucho más lindo!
>>>
>>> Yo lo resolví utilizando *groupby*. De todas maneras lo comparto porque
>>> me parece interesante para responder la pregunta original de como evitar
>>> los *else if*.
>>> Lo que hice es sencillo, los límites están ordenados por lo que siempre
>>> podés ir "buscando" el "*menor de los mayores"* :
>>>
>>> import numpy as npfrom itertools import groupby
>>>> #map_vector acetileno/etileno
>>>> ACETILENO_ETILENO_MV = {0.1: 0,
>>>>         1.0: 1,
>>>>         3.0: 1,
>>>>         np.inf: 4}
>>>> def classify(value, map_vector):
>>>>     for limit in sorted(map_vector.keys()):
>>>>         if value < limit:
>>>>             return map_vector[limit]
>>>>     else:
>>>>         return map_vector[np.inf]
>>>> def gas_a_div_gas_b(a, b):
>>>>     temp =  np.inf if b == 0 else a/b
>>>>     return classify(temp, ACETILENO_ETILENO_MV)
>>>>
>>>>
>>> Saludos!
>>>
>>> El 22 de febrero de 2018, 11:14, Facundo Batista <
>>> facundobatista at gmail.com> escribió:
>>>
>>>> El 22 de febrero de 2018, 10:59, Luis Andraschnik
>>>> <luis.andraschnik at gmail.com> escribió:
>>>>
>>>> >     if temp < 0.1:
>>>> >         result = r1
>>>> >     elif 0.1 <= temp < 1.0:
>>>> >             result = r2
>>>> >     elif 1.0 <= temp <= 3.0:
>>>> >         result = r3
>>>> >     else:
>>>> >         result = r4
>>>> >     return result
>>>>
>>>> Mirá el primer ejemplo acá:
>>>> https://docs.python.org/3/library/bisect.html#other-examples
>>>>
>>>> Si no te sale, lo vemos.
>>>>
>>>> Saludos,
>>>>
>>>> --
>>>> .    Facundo
>>>>
>>>> Blog: http://www.taniquetil.com.ar/plog/
>>>> PyAr: http://www.python.org/ar/
>>>> Twitter: @facundobatista
>>>> _______________________________________________
>>>> Lista de Correo de PyAr - Python Argentina - pyar at python.org.ar
>>>> Sitio web: http://www.python.org.ar/
>>>>
>>>> Para administrar la lista (o desuscribirse) entrar a
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>
>>>
>>>
>>> _______________________________________________
>>> Lista de Correo de PyAr - Python Argentina - pyar at python.org.ar
>>> Sitio web: http://www.python.org.ar/
>>>
>>> Para administrar la lista (o desuscribirse) entrar a
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar at python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
>
> *Martín Alejandro Castro Álvarez*
> Software Solutions
> *https://www.martincastroalvarez.com <https://www.martincastroalvarez.com>*
>
>


-- 

*Martín Alejandro Castro Álvarez*
Software Solutions
*https://www.martincastroalvarez.com <https://www.martincastroalvarez.com>*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180222/9d2fef8f/attachment.html>


Más información sobre la lista de distribución pyar