我正在努力处理一些可能并不复杂的事情。我有一个列表列表,如果它们共享任何公共元素,我想将它们分组在一起:
例如,第一个列表[1,2]与第三个列表[3,4]分组在一起,因为它们在第二个列表[2,3]之间“重叠”了
肯定有比以下更简单的方法
a = [[1,2],
[2,3],
[3,4],
[7,8]]
newlist = []
for count, pair in enumerate(a):
if count==0:
newlist.append(pair)
else:
for index, group in enumerate(newlist):
if not set(group).isdisjoint(pair):
newlist[index].extend(pair)
else:
newlist.append(pair)
newlist = [set(group) for group in newlist]
newlist
[{1, 2, 3, 4}, {8, 7}]
答案 0 :(得分:2)
类似于this帖子,一种解决方法是使用networkx
。生成图形,并使用add_edges_from
将列表添加为图形边缘。然后使用connected_components
,它将为您提供图形中一组已连接组件的列表:
L = [[1,2],
[2,3],
[3,4],
[7,8]]
import networkx as nx
G=nx.Graph()
G.add_edges_from(L)
newlist = list(nx.connected_components(G))
print(new_list)
# [{1, 2, 3, 4}, {7, 8}]