Python 查找多个语句的依赖项/执行顺序
我有几句话像Python 查找多个语句的依赖项/执行顺序,python,networkx,Python,Networkx,我有几句话像 # exhibit 1 a = 0 b = 0 c = d + a d = a + b 应该按照正确的顺序来执行 # exhibit 2 a = 0 b = 0 d = a + b # d before c c = d + a 有没有办法找到附件1中语句的正确执行顺序 我尝试将networkx与有向图和语句一起使用,如 tree.add_edge(a, b) tree.add_edge(b, d) tree.add_edge(d, c) tree.add_edge(a, c)
# exhibit 1
a = 0
b = 0
c = d + a
d = a + b
应该按照正确的顺序来执行
# exhibit 2
a = 0
b = 0
d = a + b # d before c
c = d + a
有没有办法找到附件1中语句的正确执行顺序
我尝试将networkx与有向图和语句一起使用,如
tree.add_edge(a, b)
tree.add_edge(b, d)
tree.add_edge(d, c)
tree.add_edge(a, c)
但我不知道如何穿过这棵树,所以必须得到图表2
我不局限于networkx。任何做这项工作的工具对我来说都是好的
我真正的目标文件大约有200条语句。您要查找的东西叫做拓扑排序 还有一个简单的python库,名为
toposort
给定键形式的字典取决于您运行的值
from toposort import toposort_flatten
toposort_flatten({2: {11},
9: {11, 8, 10},
10:{11, 3},
11:{7, 5},
8: {7, 3}})
给你一个有效的订单
[3, 5, 7, 8, 11, 2, 10, 9]
你可以用拓扑排序来解决这个问题。Python已经对此进行了测试
In [3]: from toposort import toposort_flatten
In [4]: toposort_flatten({'d': {'a', 'b'}, 'c': {'a','b'}})
Out[4]: ['a', 'b', 'c', 'd']
前面的答案:
在bash中,我们通常通过tsort
(表示拓扑排序)来实现这一点。Python必须为此提供一个库
$ tsort
a d
b d
a c
d c
a
b
d
c