python - 如何使用python igraph获取节点“有序”列表
问题描述
我的代码:
from igraph import Graph, plot
g = Graph(directed=True)
g.add_vertices("A", attributes=dict(operation="-"))
g.add_vertices("B", attributes=dict(operation="*"))
g.add_vertices("C", attributes=dict(operation=4))
g.add_vertices("D", attributes=dict(operation=8))
g.add_vertices("E", attributes=dict(operation="/"))
g.add_vertices("F", attributes=dict(operation=10))
g.add_vertices("G", attributes=dict(operation=2))
g.add_edges((("A", "B"), ("A", "E")))
g.add_edges((("B", "C"), ("B", "D")))
g.add_edges((("E", "F"), ("E", "G")))
io = [v['operation'] for v in g.vs]
print(*io)
产量:
- * 4 8 / 10 2
我想:
4 * 8 - 10 / 2
我在这里搜索了手册: docs
(这是绘制图表的图像,以帮助可视化问题。)
解决方案
我建议使用显式的左侧或右侧注释来增加边缘。
g.add_edges([("A", "B"), ("A", "E")], attributes={"side": ["L", "R"]})
从根节点开始,您可以递归地构造其左右手字符串并将它们连接起来,如下所示(未经测试)。
def ordered(g, node) -> str:
edges = g.adjacent(node) # uses mode=OUT by default
if len(edges) == 2:
lhs = next(edge.target_vertex for edge in edges if edge["side"] == "L")
rhs = next(edge.target_vertex for edge in edges if edge["side"] == "R")
return ordered(g, lhs) + node["operation"] + ordered(g, rhs)
else:
return node['operation']
推荐阅读
- asp.net - 使用 Flash 插件上传文件时会话重置
- gcc - 是否有与 gcc 的 __attribute__((section("name"))) 等效的 gfortran?
- reactjs - 何时使用 useState 初始值作为函数?
- java - 是否可以在 gwt 中调试 ConcurrentModificationException
- python - 姜戈。类别和子类别
- multithreading - boost::thread 不更新全局变量
- python - 为什么我在 python datetime 上得到一个意外的时区偏移量?
- docker - Docker 容器 resolve.conf 一直被覆盖
- sql-server - SQL Server 中的存储过程缓慢
- python - 使用 numba jitclass,其中一个属性是来自单独模块的另一个 jitclass