como formar grupos con los componentes de una lista

Jose Caballero jcaballero.hep en gmail.com
Jue Ago 28 00:04:10 CEST 2008


A este ejemplo le pasa lo mismo que al de Chema.
Yo creo que hasta que Francisco no aclare bien el objetivo del problema
estamos dando palos de ciego.
Bueno, vosotros de tuerto, que sois mejores programadores que yo, como salta
a la vista.



>
> lista = [['1', '2'], ['5', '11'], ['11', '7'], ['8', '6'], ['4', '5'],
> ['8', '9'], ['3', '1']]
> lista2 = [[['1', '2'],  ['3', '1']], [['5', '11'],  ['11', '7'],
> ['4', '5']], [['8', '6'], ['8', '9']]]
>
> def get_graph(l):
>    def get_edge(n1, n2):
>        for i in n1:
>            if i in n2:
>                return 1
>        return 0
>    return [[get_edge(n1, n2) for n1 in l] for n2 in l]
>
> def get_sub_graphs(l):
>    g = get_graph(l)
>    sg = []
>    left_nodes = range(len(l))
>    for i in range(len(l)):
>        if i in left_nodes:
>            sg.append([l[i][:]]) #Este nodo va a un sub_grafo nuevo
>            left_nodes.remove(i)
>            for j in left_nodes:
>                if g[i][j]:
>                    sg[-1].append(l[j][:])
>                    left_nodes.remove(j)
>    return sg
>
> print lista
> print lista2
> print get_sub_graphs(lista)
>
>
> >
> > Es una aproximación poco elegante, y muy poco eficiente, pero puede
> servir
> > para hacer algo mejor.
> > Lo que saca por pantalla es
> >
> > [['1', '2'], ['3', '1']]
> > [['5', '11'], ['11', '7'], ['4', '5']]
> > [['8', '6'], ['8', '9']]
> >
>
> Al final tire a hacerlo por mi propuesta de las matrices. Que no me
> gusta por las siguentes cosas:
>  * La representacion del grafo ocupa un espacio de n**2 (crece
> exponencialmente)
>  * No es lo suficiente generico como para usarlo para otras cosas.
> get_edge es una ñapa para este caso concreto.
>  * y por manias personales
>
> Pero bueno, conseguir grafos disjuntos en un grafo mayor es un
> problema chulo ;-)
>
> Un saludo:
>
> Javi
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
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