仅在可以进行相等比较时,在python列表中对唯一项进行分组

时间:2014-08-17 00:43:14

标签: python graph

我有一个从networkx模块创建的大量图表。两张图g1, g2是"相同"如果函数is_isomorphic

nx.is_isomorphic(g1,g2)

返回True。这不足以创建排序信息,因为我只能定义g1==g2,因此我无法使用集合或字典对项目进行分组。有没有一种简洁的方法来分组图形,以便同一组中的所有图形都是同构的?

1 个答案:

答案 0 :(得分:1)

这是一个简单的方法:

groups = []
for graph in graphs:
    # check if this graph is isomorphic to any of our groups so far
    for group in groups:
        # we only need to check one graph from each group, since isomorphism is transitive
        if networkx.is_isomorphic(graph, group[0]):
            # if isomorphic, put this graph in this group
            group.append(graph)
            break
    else:
        # if none were isomorphic, make a new group
        groups.append([graph])

这将创建一个列表列表,每个子列表包含彼此同构的组。

可能会对此进行调整,以便在某些情况下提高性能。例如,您可以尝试首先根据他们拥有的节点数量(他们的顺序)对图表进行分组(可能通过排序)。由于具有不同顺序的图形不能是同构的,因此您可以通过仅检查大小相等的图形中的同构来削减一些角落。