我有一本以下形式的字典
{ 0: [1, 2, 3, 4, 5]
1: [6, 2, 3, 4, 5]
2: [3, 4, 5, 6, 7]
3: [8, 9]
...
}
每个值(未排序列表)都对应于我想要在我的图中诱导的集团。不幸的是,正如您看到的,许多集团共享顶点,这些顶点也是其他集团的一部分。现在,我对这些集团做了一个简单的归纳:
for clique in clique_dict.itervalues():
graph.add_edges_from(combinations(clique, 2))
但这是耗时的,因为许多边缘对已经作为其他派系诱导的一部分在较早的时候被诱导。有没有更有效的方法来诱导这些集团?也许是对这些派系本身进行一些后处理?
发布于 2018-01-21 04:53:28
如果您准备了一个包含所有唯一边的列表,然后一次添加所有边,则可能会有一些轻微的改进:
edges = set(chain.from_iterable([tuple(sorted(pair)) for pair
in combinations(clique, 2)] for clique in clique_dict.values()))
graph.add_edges_from(edges)
添加排序是为了避免像(2,3)和(3,2)这样的反平行边。
https://stackoverflow.com/questions/48360952
复制相似问题