Python将多个列表与交叉点合并[重复]


问题内容

这个问题已经在这里有了答案

8年前关闭。

可能的重复:
Python:基于交集的简单列表合并

我有多个清单:

 list=[[1,2,3],[3,5,6],[8,9,10],[11,12,13]]

有没有一种聪明而又快速的方法来获取至少有一个交集的所有子列表。在我的示例中,我希望代码返回

 result=[[1,2,3,5,6],[8,9,10],[11,12,13]]

问题答案:

这可行,但可能不是很优雅:

def merge_lists(l):
        s=map(set, l)
        i, n=0, len(s)
        while i < n-1:
                for j in xrange(i+1, n):
                        if s[i].intersection(s[j]):
                                s[i].update(s[j])
                                del s[j]
                                n-=1
                                break
                else:
                        i+=1
        return [sorted(i) for i in s]