首页 > 解决方案 > 在 NetworkX 中生成邻接表 - 如何包含先前的节点?

问题描述

根据NetworkX 文档,该函数generate_adjlist()生成如下所示的邻接列表:

>>> G = nx.lollipop_graph(4, 3)
>>> for line in nx.generate_adjlist(G):
...     print(line)
0 1 2 3
1 2 3
2 3
3 4
4 5
5 6
6

但是,我注意到邻接列表不包括之前链接的节点。例如,如果您查看第三行 (2 3),它不包含 0,即使在第一行 (0 1 2 3),0 链接到节点 2。

如何包含先前省略的节点?

标签: pythonnetworkx

解决方案


这仅适用于无向图。根据定义,在邻接表中,已经提到的边不需要重复。创建图表时,如果您要放弃具有重复连接的文件,它们将被简单地忽略,因为它们是多余的。您的选择是创建自己的函数来列出所有节点,而不管它们是否已经被提及。它看起来像这样(代码从原始generate_adjlist代码无耻地修改):

def generate_adjlist_with_all_edges():
     for s, nbrs in G.adjacency():
        line = str(s) + delimiter
        for t, data in nbrs.items():
                line += str(t) + delimiter
        yield line[: -len(delimiter)]

G = nx.lollipop_graph(4, 3)
for line in generate_adjlist_with_all_edges(G):
    print(line)
> 0 1 2 3
  1 0 2 3
  2 0 1 3
  3 0 1 2 4
  4 5 3
  5 4 6
  6 5

推荐阅读