[pyar] Una manera idiomatica de hacer esto

Mariano Aquino mariano.aquino en gmail.com
Dom Abr 21 23:13:24 ART 2013


mi humilde aporte, usando corte de control:

def promediar_repetidos(lista):
    tope = len(lista)
    nueva_lista = []
    i = 0

    while i < tope:
        dato_anterior = lista[i]
        valores = []
        total = 0
        nuevo_dato = []

        while i < tope and lista[i][0] == dato_anterior[0]:
            valores.append(lista[i][1])
            i += 1

        for valor in valores:
            total += valor
        total /= len(valores)

        nuevo_dato.extend(dato_anterior)
        nuevo_dato.append(total)
        nueva_lista.append(nuevo_dato)

    return nueva_lista

espero que te sirva!

Mariano


2013/4/19 Daniel Moisset <dmoisset en machinalis.com>

> Mi intento con itertools: http://pastebin.com/HgbP25U6
>
> Hacer el promedio de un iterable requirió mas magia negra de la que me
> gustaba, pero el agrupador sale derecho. Al final use un for con un yield
> en vez de una generator expression por que me parecio que quedaba muy
> grandote como oneliner
>
> Saludos,
>     D.
>
>
> 2013/4/19 Jairo Trad <frodobolsonxx en gmail.com>
>
>> Buenas, les cuento que estoy con un problema y aunque tengo claro que
>> tengo que hacer no tengo claro cual es la mejor manera de implementarlo. En
>> particular es posible que el algoritmo se encuentre con un dataset muuuygrande y no quiero que se convierta en un agujero negro de recursos.
>>
>>
>> Resulta que tengo una lista ordenada de pares [Fecha, Valor], puedo tener
>> valores diferentes, con las mismas fechas y necesito que en caso de tener
>> valores con fechas repetidas se saque un promedio de los valores y se deje
>> un solo elemento con la fecha en cuestión. les dejo un ejemplo para que lo
>> vean mas claro:
>>
>> esta lista:
>>
>> [ [datetime.datetime(2013, 4, 10, 12, 0), 23.4],
>>   [datetime.datetime(2013, 4, 10, 12, 0), 25.81],
>>   [datetime.datetime(2013, 4, 10, 12, 0), 25.08],
>>   [datetime.datetime(2013, 4, 10, 13, 0), 18.49],
>>   [datetime.datetime(2013, 4, 10, 14, 0), 20.74],
>>   [datetime.datetime(2013, 4, 10, 14, 0), 25.86] ]
>>
>> deberia quedar asi:
>>
>> [ [datetime.datetime(2013, 4, 10, 12, 0), 25,03],
>>   [datetime.datetime(2013, 4, 10, 13, 0), 18.49],
>>   [datetime.datetime(2013, 4, 10, 14, 0), 23.3] ]
>>
>>
>> Entiendo que, a partir de saber que la lista estar ordenada, hay una
>> manera obvia de hacer esto, pero no soy Holandés... así que me vendría
>> bastante bien una mano!
>>
>> Saludos, Jairo
>>
>> --
>> Jairo Trad
>> Ing. en Computación - FCEFyN - UNC
>> ar.linkedin.com/in/ingjairotrad
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130421/76da19c0/attachment.html>


More information about the pyar mailing list