como formar grupos con los componentes de una lista
Chema Cortes
pych3m4 en gmail.com
Mie Ago 27 13:34:18 CEST 2008
El día 26 de agosto de 2008 18:54, Francisco Santoyo Santos
<patximotxo en yahoo.es> escribió:
> 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
Sin duda que habrá muchas maneras. Aquí te pongo una "elegante",
aunque me temo que te va a costar entenderla:
#iterador que devuelve pares compuestos por un item y una lista de los
items que le siguen
def restos(lista):
l=lista[:] #copia de trabajo
while l:
yield l.pop(0),l
lista2= [ (x,y) for (x,resto) in restos(lista) for y in resto
if any(i for i in x if i in y)
]
Supongo que te costará entenderlo. Te poco una versión menos
optimizada, pero más comprensible:
lista2=[]
for i in range(len(lista)):
x=lista[i]
for y in lista[i+1:]:
if any(i for i in x if i in y):
lista.append([x,y])
Lo único raro te será el any(), que usa un iterador como argumento. Si
no lo entiendes, después de revisar la documentación, no dudes en
preguntarnos.
_______________________________________________
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