使用 Networkx (Python) 进行图遍历

2024-05-01

我正在使用 Networkx 来管理依赖关系图。 假设我有这个图,每个字母代表一个服务器

>>> G = nx.Graph()
>>> G.add_edge("A","B")
>>> G.add_edge("A","H")
>>> G.add_edge("H","C")
>>> G.add_edge("B","C")
>>> G.add_edge("B","D")

           A
         /   \
       H       B
     /        /  \
   C         C     D 

所以在这里我们可以看到,在启动 A 之前,我们需要启动 H 和 B,要启动 H,我们需要启动 C,然后启动 B,我们需要启动 C 和 D

通过摆弄 Networkx,我发现我可以通过 dfs 遍历来实现

print nx.dfs_successors(G,"A")
{A:[H,B], H:[C], B:[D] }

但我对这种方法有疑问。正如你所看到的,当树中有两个相同的字母时,Networkx 只选择将其中一个放入最终结构中(这是正确的)但我需要完整的结构 如何强制 Networkx 添加结构 B:[D,C] ?

我想通过这样做来精确说明

>>> nx.dfs_successors(G,"B")
{'B': ['C', 'D']}

所以一切都是“内部”正确的,只是 dfs_successors 没有按照我希望的方式显示它。

谢谢


使用您的代码,您的图表不会按您的预期显示。如果你这样做:

import pylab as p
import networkx as nx

G = nx.Graph()
G.add_edge("A","B")
G.add_edge("A","H")
G.add_edge("H","C")
G.add_edge("B","C")
G.add_edge("B","D")

nx.draw(G)
p.show()

you will see your graph as: Graph

这是由于以下逻辑G.add_edge("A", "B"):

  1. If G没有id为“A”的节点,添加它。
  2. If G没有id为“B”的节点,添加它。
  3. 用新边将“A”连接到“B”。

因此,您只创建五个节点,而不是如图所示的六个。

EditNetworkx 可以将任何哈希值作为节点的值,并且在图中它使用 str(node) 来标记每个圆。因此,我们可以简单地定义我们自己的 Node 类(您可能想将其称为 Server?)并赋予它所需的行为。

import pylab as p
import networkx as nx


class Node(object):
    nodes = []

    def __init__(self, label):
        self._label = label

    def __str__(self):
        return self._label

nodes = [Node(l) for l in ["A","B","C","C","D","H"]]
edges = [(0,1),(0,5),(5,2),(1,3),(1,4)]

G = nx.Graph()
for i,j in edges:
    G.add_edge(nodes[i], nodes[j])

nx.draw(G)
p.show()

gives us New graph and so what you wanted.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Networkx (Python) 进行图遍历 的相关文章

  • 翠儿。让流永远运行

    我对 tweepy python 库比较陌生 我想确保我的流 python 脚本始终在远程服务器上运行 因此 如果有人能够分享如何实现这一目标的最佳实践 那就太好了 现在我正在这样做 if name main while True try
  • 在 Python 中使用 Selenium 处理“接受 Cookie”弹出窗口

    我一直在尝试用硒抓取这个房地产网站的一些信息 但是 当我访问该网站时 我需要接受 cookie 才能继续 这仅在机器人访问网站时发生 而不是在我手动执行时发生 当我尝试通过 xpath 或 id 查找相应的元素时 正如我在手动检查页面时找到
  • 如何在Python中循环并存储自变量中的值

    我对 python 很陌生 所以这听起来可能很愚蠢 我进行了搜索 但没有找到解决方案 我在 python 中有一个名为 ExcRng 的函数 我可以对该函数执行什么样的 for 循环 以便将值存储在独立变量中 我不想将它们存储在列表中 而是
  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • 从字符串到类型的词法转换

    最近 我尝试用Python存储和读取文件中的信息 遇到了一个小问题 我想从文本文件中读取类型信息 从 string 到 int 或 float 的类型转换非常有效 但从 string 到 type 的类型转换似乎是另一个问题 当然 我尝试了
  • PIL Image.size 返回相反的宽度/高度

    使用PIL确定图像的宽度和高度 在特定图像上 幸运的是只有这一个 但这很麻烦 从 image size 返回的宽度 高度是相反的 图片 http storage googleapis com cookila 533ebf752b9d1f7c
  • Python - 用逗号分割,跳过括号内的内容

    我需要用逗号分隔字符串 但我对这种情况有一个问题 TEXT EXAMPLE THIS IS A EXAMPLE BUT NOT WORKS FOR ME SECOND THIRD 我想拆分并得到 var 0 TEXT EXAMPLE THI
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • 具有多个元素的数组的真值是二义性错误吗? Python

    from numpy import from pylab import from math import def TentMap a x if x gt 0 and x lt 0 5 return 2 a x elif x gt 0 5 a
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 将 Pandas 列中的列表拆分为单独的列

    这是我在 pandas 数据框中的 特征 列 Feature Cricket 82379 Kabaddi 255 Reality 4751 Cricket 15640 Wildlife 730 LiveTV 13 Football 4129
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • Flask WTForms 使用变量自动填充 StringField

    我有一个表格 我想用上一页收到的信息自动填充一些字段 但如果他们想调整它 它需要是可更改的 我正在为我的 SelectField 使用动态创建的列表 但添加 StringField 并不成功 请参阅下面的我的代码 forms py clas
  • Python - 如何查询定义方法的类?

    我的问题有点类似于this one https stackoverflow com questions 5520580 how do you get all classes defined in a module but not impor
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs

随机推荐

  • 使用包含双引号的字符串填充输入字段

    我从服务器返回一个值 其中包含双引号 我需要用值填充输入标签 我尝试过使用 escape myVariable 但这会将空格转换为 20 等 我想我可以写一个 if then 来表示如果字段中有双引号 则使用 value 但是如果字段中同时
  • 如何访问 Go 中的嵌套模块(子模块)?

    去版本 1 12 9 这是一个简单演示项目的结构 所以我们有一个模块domain 其中包含两个模块 activity and person 我想将域与主文件中的所有嵌套模块一起使用 gt 模块 go 我知道如何导入domain主要在go m
  • SciKit-Learn 的分解模块中未安装 LatentDirichletAllocation

    我在 SciKit Learn 包中遇到了一些奇怪的问题 SciKit Learn 包内有 分解 模块 其中应包含 LatentDirichletAllocation 函数 请参阅此处的文档 https scikit learn org s
  • 根据机会创建销售订单时填充自定义字段

    我在 SO 屏幕 SO301000 上创建了一个自定义字段 联系人 现在 当用户从机会屏幕 CR304000 创建销售订单时 我需要填充这些字段 新的自定义字段联系人基于在机会中选择的客户 我可以看到 当我从机会创建销售订单时 客户会自动填
  • 带 webusb 的指纹扫描仪

    可以将 USB 指纹扫描仪与 webusb 连接 配对 https wicg github io webusb https wicg github io webusb 我有数字角色 U are U 4500 想要使用react js 连接到
  • 使用 Codename One 在 WebView 上实现 WebRTC

    我正在开发一个应用程序 我需要使用 Android 的 WebView 包含 WebRTC 根据这篇文章 https developer chrome com multidevice webview overview https devel
  • 使用 JSON 响应

    执行 ajax 请求后 我从服务器收到以下响应 error false success true 我的ajax代码 ajax url update type post data this serialize success function
  • HashSet 是否与 List 相同但具有唯一性?

    我需要有能力在收藏中拥有独特的物品 我打算使用字典 这样我就可以使用 ContainsKey 方法 但我认为这会很浪费 因为我不会使用键 值对的 Value 属性 我遇到了HashSet
  • 如何使表单仅位于应用程序的最顶层?

    我正在制作 Excel 插件 其中单击菜单项或工具栏按钮 打开表单 我已将窗体的最顶层设置为 true 但它仍然是 Windows XP 的所有应用程序的最顶层 我只需要保持 Microsoft Excel 的最高位置即可 我在 Visua
  • 如何在接收端打开没有 SSHD 的 shell?

    我有一台没有 SSHD 的机器 我想从远程机器 我可以完全控制 在这台机器上打开 bash shell 由于我的有限机器上有 SSH 因此我配置了反向代理 ssh R 19999 localhost 22 remoteuser remote
  • Xcode 更改未修改的 Storyboard 和 XIB 文件

    从 git 工作流程的角度来看 当多人协作时 故事板是一种巨大的痛苦 例如 storyboard 文件中的 XML 有其起始位置
  • 如何循环遍历 Windows 窗体窗体中的所有控件或如何查找特定控件是否是容器控件?

    我会告诉我的要求 我需要有一个keydown中每个控件的事件Windows 窗体 http en wikipedia org wiki Windows Forms形式 如果我必须对所有 keydown 事件执行的操作相同 那么最好这样做 而
  • Rails 3.1 资源在服务器重新启动之前无法识别 rmagick 上传的新图像

    我有我的Rails 3 1 0应用程序运行passenger in production环境 我有一个部分 应用程序允许用户更改他的个人资料图片 因此我使用 ajax 上传器上传图像 在我的控制器中 我上传文件并使用 rmagick 为图像
  • Jquery UI 滑块 - 输入值并将滑块移动到位置

    我想知道是否有人找到了实际填充滑块的输入框并使其滑动到适当位置 onBlur 的解决方案或示例 目前 众所周知 它只是用您所在的位置更新此值在 因此 在某些方面 我试图扭转这个令人惊叹的滑块的功能 我找到的一个链接 http www web
  • 如何使 Angularjs 应用程序可抓取

    我使用 Angular js 构建单页应用程序 我的问题是如何使应用程序可爬行 因为路由是在客户端使用 ng view 处理的 而服务器只返回简单的头文件 网站链接 http india elections in http india el
  • 如何更新 Android 上的 Google Analytics 清单?

    我正在尝试禁用 Google Firebase Analytics 的自动屏 幕报告 在里面Firebase 博客文章 https firebase googleblog com 2020 08 google analytics manua
  • 制作波浪动画

    我正在尝试制作音频波动画 这段代码有什么问题 我尝试将翻译更改为比例 但没有成功 有人可以给我一些动画练习的链接吗 webkit box sizing border box box sizing border box webkit pers
  • 调用过程默认值而不将值绑定到 Jdbc 中的参数

    我正在尝试打电话PL SQL为其某些参数定义了默认值的过程 我正在这样做使用CallableStatement in JDBC 该过程有大量已定义默认值的参数 我不想在 Java 代码中显式设置默认值 这样做会使维护代码变得更加困难 如果
  • 当需要切换rootViewController时

    我一直在开发一个 Swift 项目 我有两个视图控制器 登录视图控制器和主页视图控制器 当用户启动应用程序时 如果用户未登录 我想显示登录视图控制器 另一方面 如果用户登录 我想显示主页视图控制器 所以流程会是这样的 当用户未登录时 显示
  • 使用 Networkx (Python) 进行图遍历

    我正在使用 Networkx 来管理依赖关系图 假设我有这个图 每个字母代表一个服务器 gt gt gt G nx Graph gt gt gt G add edge A B gt gt gt G add edge A H gt gt gt