【问题标题】:Generating Adjacency List in NetworkX - How to Include Previous Nodes?在 NetworkX 中生成邻接表 - 如何包含先前的节点?
【发布时间】:2020-10-19 18:32:25
【问题描述】:

根据NetworkX documentation,函数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。

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

【问题讨论】:

  • 关闭这个问题有什么问题?我认为这个问题再清楚不过了。
  • 重新阅读 How to ask,因为您第一次阅读时似乎错过了一些关键点,即“不要发布代码、数据、错误消息等的图像。 - 将文本复制或输入到问题中”(强调原文)。看看为什么an image of your code is not helpful cc @Marko
  • 编辑队列现在已满,但这是一个非常简单的编辑。
  • @desertnaut 图片已被文字替换,请打开问题以获得潜在答案。

标签: python networkx


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2012-05-25
    相关资源
    最近更新 更多