Fusionner des listes qui partagent des éléments communs

Mon entrée est une liste de listes. Certains d'entre eux partagent des éléments communs, par exemple.

L = [['a','b','c'],['b','d','e'],['k'],['o','p'],['e','f'],['p','a'],['d','g']]

J'ai besoin de fusionner toutes les listes, qui partagent un élément commun, et répétez cette procédure tant qu'il n'y a plus de listes avec le même élément. J'ai pensé à utiliser les opérations booléennes et une boucle while, mais ne pouvait pas arriver à une bonne solution.

Le résultat final devrait être:

L = [['a','b','c','d','e','f','g','o','p'],['k']] 
  • Qu'entendez-vous par fusion? L'Union? Pouvez-vous montrer le résultat que vous attendez pour votre exemple de données?
  • Dans votre exemple, voulez-vous arrêter lorsque vous rencontrez [k]? Ou allez-vous par le biais de toutes vos listes?
  • ce sujet de la liste [[a, b, c], [b, d, e], [d, f, g]]. Devraient tous être fusionnées en bas à une liste? le premier et le dernier listes n'ont pas un élément en commun.
  • De toute façon, la complexité sera, au mieux, expotential (probablement le pire). Comment au sujet de l'utilisation de sets au lieu de faire au moins la vérification d'éléments communs rapide?
  • Vous passez par l'ensemble de la liste une fois, de rejoindre toutes les listes qui ont un élément commun (si bool(ensemble(A) & set(B)) == True). Après que vous vérifiez de nouveau et de nouveau aussi longtemps que vous ne pouvez pas rejoindre le reste de la liste. Si il y a une liste à n éléments communs à d'autres listes, nous la garder comme elle est.