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

Kike Cabrera kikecalpe en gmail.com
Sab Feb 9 21:40:14 CET 2008


>
>
> Date: Wed, 6 Feb 2008 23:00:08 +1930
> From: "Francisco Palm" <francisco.palm en gmail.com>
> Subject: Re: [Python-es] duda sobre listas por comprension o listas
>         autodefinidas o como se llamen
> To: " Lista de discusión sobre python en castellano "
>         <python-es en aditel.org>
> Message-ID:
>         <c4ae52b10802051930k24b35502xea4aa3366d008506 en mail.gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1
>
> 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?


vuelvo a hacer incapie en esto, ¿sabeis de algun manual donde esten mas
extensamente explicadas este tipo de listas?

> >
> > > 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?
> >


¿que quieres decir con propiedad ' transitiva'? ¿crear equivalencias? ¿de
que?
estoy segurisimo de lo que busco, no estoy seguro sin embargo que con listas
autodefinidas sea la manera correcta de hacerlo.

>
> > 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]
> >


no sirve para tuplas de mas de tres elementos, puesto que en vez de hacer
grupos de tuplas con mas de 2 diferencias, hace grupos con tan solo dos
tuplas, tal y como se puede ver a continuacion.

>>> combinacion
[('1', '1', '1', '1'), ('1', '1', '1', 'x'), ('1', '1', 'x', '1'), ('1',
'1', 'x', 'x'), ('1', 'x', '1', '1'), ('1', 'x', '1', 'x'), ('1', 'x', 'x',
'1'), ('1', 'x', 'x', 'x'), ('x', '1', '1', '1'), ('x', '1', '1', 'x'),
('x', '1', 'x', '1'), ('x', '1', 'x', 'x'), ('x', 'x', '1', '1'), ('x', 'x',
'1', 'x'), ('x', 'x', 'x', '1'), ('x', 'x', 'x', 'x')]
>>> combinaciones = [(x,y) for x in combinacion for y in combinacion if
compara(x,y)>2]
>>> len(combinaciones)
80
>>> combinaciones
[(('1', '1', '1', '1'), ('1', 'x', 'x', 'x')), (('1', '1', '1', '1'), ('x',
'1', 'x', 'x')), (('1', '1', '1', '1'), ('x', 'x', '1', 'x')), (('1', '1',
'1', '1'), ('x', 'x', 'x', '1')), (('1', '1', '1', '1'), ('x', 'x', 'x',
'x')), (('1', '1', '1', 'x'), ('1', 'x', 'x', '1')), (('1', '1', '1', 'x'),
('x', '1', 'x', '1')), (('1', '1', '1', 'x'), ('x', 'x', '1', '1')), (('1',
'1', '1', 'x'), ('x', 'x', 'x', '1')), (('1', '1', '1', 'x'), ('x', 'x',
'x', 'x')),
...
(('x', 'x', 'x', '1'), ('x', '1', '1', 'x')), (('x', 'x', 'x', 'x'), ('1',
'1', '1', '1')), (('x', 'x', 'x', 'x'), ('1', '1', '1', 'x')), (('x', 'x',
'x', 'x'), ('1', '1', 'x', '1')), (('x', 'x', 'x', 'x'), ('1', 'x', '1',
'1')), (('x', 'x', 'x', 'x'), ('x', '1', '1', '1'))]
>>>

¿algun consejo?

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
>

muchas gracias a vosotros por ayudar, por mi parte teneis 10 puntos los dos.
------------ próxima parte ------------
_______________________________________________
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