[Python-es] duda sobre listas por comprension o listas
autodefinidas o como se llamen
Chema Cortes
py en ch3m4.org
Mie Feb 6 03:22:46 CET 2008
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]
Más información sobre la lista de distribución Python-es