duda sobre listas por comprension o listas autodefinidas o como se llamen

Francisco Palm francisco.palm en gmail.com
Mie Feb 6 04:30:08 CET 2008


El 6/02/08, Chema Cortes <py en ch3m4.org> escribió:
> El Wednesday 06 February 2008 01:43:25 Kike Cabrera escribió:
> > tengo una duda sobre listas por comprension, como se las llama en dive into
> > python<http://almacen.gulic.org/diveintopython-5.4-es/native_data_types/map
> >ping_lists.html>, o listas autodefinidas como se las llama en el manual de
> > guido<http://pyspanishdoc.sourceforge.net/tut/node7.html#SECTION00714000000
> >0000000000> mi gran duda es que no termino de dar con la formula para
> > aprovecharlas en lo que necesito, ¿conoceis algun sitio donde esten mejor
> > documentadas?
> >
> > un ejemplo de lo que necesito:
> > >>> lista = ['1','x']
> > >>> combinacion = [(a,b,c) for a in lista for b in lista for c in lista]
> > >>> combinacion
> >
> > [('1', '1', '1'), ('1', '1', 'x'), ('1', 'x', '1'), ('1', 'x', 'x'), ('x',
> > '1', '1'), ('x', '1', 'x'), ('x', 'x', '1'), ('x', 'x', 'x')]
> > lo que ahora necesito y no se como hacer (he supuesto que con este tipo de
> > listas se tiene que poder):
> > combinacion1 == [('1','1','1'),('x','x','x')]
> > combinacion2 == [('1','1','x'),('x','x','1')]
> > combinacion3 == [('1','x','1'),('x','1','x')]
> > combinacion4 == [('1','x','x'),('x','1','1')]
> >
> >...
> > el objetivo es conseguir agrupar las tuplas de forma que todas las del
> > mismo grupo se diferencian entre si en al menos tres elementos, el numero
> > de grupos esta determinado.
>
> Por ejemplo, para calcular el número de diferencias entre dos tuplas:
>
> def ndiff(a,b):
>   return sum(1 for (i,j) in zip(a,b) if i<>j)
>
> En cuanto a agrupar tuplas según el número de diferencias entre sí, no es una
> propiedad "transitiva", luego no es posible crear equivalencias. ¿Estás
> seguro de que es lo que buscas?
>
>
> Con esta reserva, podría ser algo así:
>
> L0=['1','x']
> listas=[(a,b,c) for a in L0 for b in L0 for c in L0]
>
> combinaciones=[(x,y) for x in L for y in L if ndiff(x,y)>=3]
>

Y
combinacion1 = list(combinaciones[0])
combinacion2 = list(combinaciones[1])
combinacion3 = list(combinaciones[2])

Y no te olvides darle a Chema 4.75 puntos por la tarea y a mí me das 0.25.

Gracias!

Saludos

F. Palm

-- 
--------------------------------------
fpalm en ula.ve
francisco.palm en gmail.com

cel: 0414 5109177
tel: 0274 6352001

----
Yo creo que todavía no es demasiado tarde para construir una utopía
que nos permita compartir la tierra. Gabriel García Márquez.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es