查找多个语句的依赖关系/执行顺序

时间:2014-10-25 18:29:36

标签: 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)

但是我没有看到如何遍历树,所以必须得到展览2。

我不仅限于networkx 任何做这项工作的工具对我来说都没问题。

我的真实目标文件大约有200个语句。

2 个答案:

答案 0 :(得分:1)

您正在寻找的东西称为拓扑排序http://en.wikipedia.org/wiki/Topological_sorting

还有一个名为toposort https://pypi.python.org/pypi/toposort/1.0

的简单python库

鉴于KEY形式的字典取决于您运行的值

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]

答案 1 :(得分:1)

您可以使用拓扑排序来解决它。 Python为此提供了a library

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