【问题标题】:Python: how to find unique nodes between two networks in Python 3?Python:如何在 Python 3 中找到两个网络之间的唯一节点?
【发布时间】:2018-06-08 15:16:59
【问题描述】:

我有两个网络 GG1 是用 networkx 生成的。

为了找到包含两个网络之间唯一节点的列表(即交叉点),我在Python 2.7 中运行了以下完美运行的命令。

tmp2 =  list(set(G.nodes) & set(G1.nodes))

带有Python 3 的机器中的相同命令返回以下错误:

TyperError: 'method' object is not iterable

有没有办法避免Python 3.x 出现这个错误?

【问题讨论】:

  • 我创建了一个简单的网络,无法重现您的问题,这意味着您没有提供minimal reproducible example。您的代码在 Python 3 networkx 2.1 版中对我来说很好。你能发布你的networkx版本吗?

标签: python python-3.x python-2.7 unique networkx


【解决方案1】:

错误提示 nodes 是 Python 3 中的一个方法,因此应将代码更改为 list(set(G.nodes()) & set(G1.nodes())) 以便实际调用它。

【讨论】:

    【解决方案2】:

    在networkx 1.x版本中,G.nodes是一个方法,它返回G的节点。 G.nodes()G 的节点列表。因此,您对set(G.nodes) 的调用是在要求Python 从一个方法中创建一个集合。那是做不到的。它可以将G的节点组成一个集合。所以set(G.nodes()) 有效。

    在 2.x 版本中,G.nodesG.nodes() 都是 NodeView 对象。这些操作很像列表(尽管存在差异)。

    因此,您的命令将在 networkx 的最新版本中运行,但不会在旧版本中运行。即使您切换到使用2.x,我建议仍将其称为G.nodes(),以防代码曾经在早期版本中运行。

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多