Usando sublistas para crear nuevas listas donde los números no se repiten

Dada una lista:

g = [[0, 7], [1, 2, 10, 19], [3, 4, 5, 6, 15, 21, 24, 27], [0, 7, 8, 9, 12, 17], [1, 10, 11, 20], [8, 12, 13, 18], [14, 25], [3, 15, 16, 22], [9, 13, 17, 18]] 

Quiero verificar los números en la lista secundaria para que para cualquier número que exista en más de una lista secundaria, ambas listas se puedan combinar para formar una nueva lista, por ejemplo, [8, 12, 13, 18] y [9, 13 ,17, 18] pueden combinar para dar [8, 9, 12, 13, 17, 18] . Nota: el número no se repite y quiero hacer la lista más grande posible.

He escrito el siguiente código, pero no es perfecto y la repetición no se ha eliminado, ¿puede alguien ayudarme?

 for i in g: for j in g: for k in i: for l in j: if k == l: m=list(set(i + j)) if m not in n: n.append(m) 

Mi salida esperada es:

 [[0, 7, 8, 9, 12, 13, 17, 18], [1, 2, 10, 11, 19, 20], [3, 4, 5, 6, 15, 16, 21, 22, 24, 27], [25, 14]] 

A partir de su lista inicial de listas:

 >>> g = [[0, 7], [1, 2, 10, 19], [3, 4, 5, 6, 15, 21, 24, 27], [0, 7, 8, 9, 12, 17], [1, 10, 11, 20], [8, 12, 13, 18], [14, 25], [3, 15, 16, 22], [9, 13, 17, 18]] 

Mientras trabajas, creo que lo que quieres es combinar todas las sublistas coincidentes del rest de la lista en la sublista actual, luego eliminarlas de la lista original:

 >>> for start_index, start in enumerate(g): while True: for end_index, end in enumerate(g[start_index+1:], start_index+1): if any(x == y for x in start for y in end): g[start_index].extend(end) del g[end_index] break else: break >>> g [[0, 7, 0, 7, 8, 9, 12, 17, 8, 12, 13, 18, 9, 13, 17, 18], [1, 2, 10, 19, 1, 10, 11, 20], [3, 4, 5, 6, 15, 21, 24, 27, 3, 15, 16, 22], [14, 25]] 

Entonces todo lo que tienes que hacer es deshacerte de los duplicados:

 >>> [sorted(set(l)) for l in g] [[0, 7, 8, 9, 12, 13, 17, 18], [1, 2, 10, 11, 19, 20], [3, 4, 5, 6, 15, 16, 21, 22, 24, 27], [14, 25]] 

Esto es relativamente ineficiente, pero le proporciona un punto de inicio para la mejora (por ejemplo, si el start y el end ya fueran conjuntos, el start & end podrían reemplazar a any ).