我有几个声明,如
# 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个语句。
答案 0 :(得分:1)
您正在寻找的东西称为拓扑排序http://en.wikipedia.org/wiki/Topological_sorting
还有一个名为toposort
https://pypi.python.org/pypi/toposort/1.0
鉴于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