[pyar] Iterando sobre 2 listas

Luis Andraschnik luis.andraschnik en gmail.com
Lun Abr 9 15:05:53 -03 2018


Hola David

Muy buenos aportes.

El tema era que hice una app que graficaba una curva de destilación, que es
un gráfico de porcentaje vs temperatura. La curva va de 0% a 95%. - 0,
5,10,20,30,40,...95,- puntos prefijados que el analista de laboratorio debe
anotar la temperatura.

Sucede que en un gasoil siempre se llega a 95%por lo que hice el formulario
con todos los valores que en teoría deberían medirse, pero de repente
analizaron un producto que no era gasoil y llegaba a 80% y no se destilaba
más. Cómo la app la hice con Flask y WTform, los datos 85 y 90 eran None.
las lecturas para el eje Y serían (con números inventados):  [210°C, 230°C,
250°C, ....,  None, None]
En mi caso práctico no habría un curva como esta: [210°C, None, 250°C,
....,  None, None]

Saludos!
Luis

El 7 de abril de 2018, 18:45, David Weil <tenuki en gmail.com> escribió:

> Hola Luis!
>
> On 4/4/2018 5:06 PM, Luis Andraschnik wrote:
>
>> Si tengo 2 listas de igual longitud y quiero recortar eliminando los None
>> y manteniendo la paridad de longitud
>> tengo:
>> foo=[1,2,3,4,5,6]
>> bar=[100,200,300, None,None]
>> y quiero esto:
>> foo=[1,2,3]
>> bar=[100,200,300]
>>
>
> Se les ocurre alguna solución más pythónica, por ejemplo usando list
>> comprehensions?
>> def emparejar(foo,bar):
>>     foo1=[]
>>     bar1=[]
>>     for i, j in zip(foo,bar):
>>         if j is not None:
>>             foo1.append(i)
>>             bar1.append(j)
>>
>>     return foo1, bar1
>>
>
> No me queda claro a partir del enunciado, que pasa si hay None en ambas
> listas y estan en distintas posiciones que deberia pasar, ej:
>  [1,2,None,4,5] y ['a',None, 'c', 'd', 'e']  que deberia devolver?
>
>
> ( Y el codigo que pones tampoco quita ambiguedades ya que no considera
> Nones en la primer lista (cosa que si hace la otra solucion que te
> propusieron) )
>
>
> Suponiendo que solamente filtras todas las posiciones que tienen None de
> los inputs, en cualquiera de los inputs fijtate, la mayor parte del trabajo
> la haces con zip(..) y como te mostraron se puede usar zip tambien para
> re-armar los datos, pero podes aprovechar y no limitarte a solamente dos
> listas de input:
>
> def myfilter(*args):
>     for elements in zip(*args):
>         if not None in elements:
>             yield elements
>
>
> Fijate ademas que tambien se puede usar "in" para chequear por None en los
> elementos y entonces filtrar (evitandote escribir una condicion para cada
> una de las listas de input).
>
> def main():
>     print zip( *myfilter([1,2,3,4], 'abcd') )
>     print zip( *myfilter([1,None,3,4], 'abcd') )
>     print zip( *myfilter([1,None,3,4], [1,2,None, 4]) )
>
> -> [(1, 2, 3, 4), ('a', 'b', 'c', 'd')]
> -> [(1, 3, 4), ('a', 'c', 'd')]
> -> [(1, 4), (1, 4)]
>
> Saludos!
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180409/380e1517/attachment.html>


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