como formar grupos con los componentes de una lista

Jose Caballero jcaballero.hep en gmail.com
Mie Ago 27 20:43:37 CEST 2008


Una posibilidad MUY ineficiente:


  1 #!/usr/bin/env python
  2
  3 lista = [['1', '2'], ['5', '11'], ['11', '7'], ['8', '6'], ['4', '5'],
['8', '9'], ['3', '1']]
  4
  5 class grupo:
  6         def __init__(self, par):
  7                 self.elementos = [par[0], par[1]]
  8                 self.pares = []
  9                 self.pares.append(par)
 10
 11         def pertenece(self, par):
 12                 if par[0] in self.elementos or par[1] in self.elementos:
 13                      self.pares.append(par)
 14                      if par[1] not in self.elementos:
 15                              self.elementos.append(par[1])
 16                      if par[0] not in self.elementos:
 17                              self.elementos.append(par[0])
 18                      return True
 19                 return False
 20
 21 primer_par = lista[0]
 22 ListaGrupos = []
 23 ListaGrupos.append(grupo(primer_par))
 24
 25 for par in lista[1:]:
 26         for gr in ListaGrupos:
 27                 if gr.pertenece(par):
 28                         break
 29         else:
 30                 ListaGrupos.append(grupo(par))
 31
 32
 33 for sublist in ListaGrupos:
 34         print sublist.pares


Perdón por los números, pero es que yo, como buen dinosaurio que soy, lo
hago todo en vim (motivo por el que no puedo contribuir en los hilos sobre
IDEs, jeje)
y al hacer copy&paste va la numeración con el resto.

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


Suerte,
Jose



El 26 de agosto de 2008 12:54, Francisco Santoyo Santos <patximotxo en yahoo.es
> escribió:

> Hola a todos de nuevo;
> tengo el siguiente problema:
>
> lista = [['1', '2'], ['5', '11'], ['11', '7'], ['8', '6'], ['4', '5'],
> ['8', '9'], ['3', '1']]
>
> ahora quiero hacer una lista compuesta de sublistas, cada una de las cuales
> contenga las sublistas que en la primera lista contenian elementos comunes
> en alguna de las dos posiciones. Es decir, obtener algo así;
>
> lista2 = [[['1', '2'],  ['3', '1']], [['5', '11'],  ['11', '7'],  ['4',
> '5']], [['8', '6'], ['8', '9']]]
>
> Vosotros como lo hariais?
> A mi no se me ocurre, newbie power XD
> Un saludo
>
>
> __________________________________________________
> Correo Yahoo!
> Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
> Regístrate ya - http://correo.yahoo.es
>
> _______________________________________________
> 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