从python中的元组或集合列表中查找不相交的集合

use*_*500 4 python intersection graph-theory set connected-components

问题是:我有一个元组列表(如果需要,也可以设置)。例如:

a = [(1, 5), (4, 2), (4, 3), (5, 4), (6, 3), (7, 6)]
Run Code Online (Sandbox Code Playgroud)

我想找到的是一个列表

r = [(1, 5, 4, 2, 3, 6, 7)]
Run Code Online (Sandbox Code Playgroud)

因为一旦所有集合放在一起,交集就不是空的。

例如

a = [(1, 5), (4, 2), (4, 3), (5, 4), (6, 3), (7, 6), (8, 9)]
Run Code Online (Sandbox Code Playgroud)

结果应该是

r = [(1, 5, 4, 2, 3, 6, 7), (8, 9)]
Run Code Online (Sandbox Code Playgroud)

希望问题很清楚。那么在python中最优雅的方法是什么,如果有的话?

干杯

wim*_*wim 7

这些是图形的连接组件,可以使用图形库(例如networkx. 对于您的第二个示例:

>>> edges = [(1, 5), (4, 2), (4, 3), (5, 4), (6, 3), (7, 6), (8, 9)]
>>> graph = nx.Graph(edges) 
>>> [tuple(c) for c in nx.connected_components(graph)]
[(1, 2, 3, 4, 5, 6, 7), (8, 9)]
Run Code Online (Sandbox Code Playgroud)