具有公共元素的组子列表

2024-04-26 21:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在为一些可能并不复杂的事情而挣扎。我有一个列表列表,如果元素共享任何公共元素,我想将它们分组在一起:

enter image description here

例如,第一个列表[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}]

Tags: in元素列表forindexifcountgroup
1条回答
网友
1楼 · 发布于 2024-04-26 21:21:58

thispost类似,一种方法是使用networkx。生成一个图,并使用^{}将列表添加为图边。然后使用^{},它将精确地给出图形中连接组件集的列表:

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}]

相关问题 更多 >