<p>像这样的事情也许会奏效。它使用节点的长度作为级别(必须在代码中注释掉0级节点才能正常工作),节点字符串的第一个元素作为组。我认为这正是您对数据结构的预期。在</p>
<pre><code># create it in networkx
import networkx as nx
G = nx.DiGraph()
#G.add_edges_from([('0', '1'), ('0', '2'), ('0', '3')])
G.add_edges_from([('1', '11'), ('1', '12'), ('1', '13')])
G.add_edges_from([('2', '21'), ('2', '22'), ('2', '23')])
G.add_edges_from([('3', '31'), ('3', '32'), ('3', '33')])
#
G.add_edges_from([('12', '121'), ('13', '131')])
G.add_edges_from([('12', '121'), ('13', '131')])
G.add_edges_from([('21', '211'), ('22', '221')])
#
G.add_edges_from([('13', '121')])
G.add_edges_from([('21', '131')])
G.add_edges_from([('131', '211')])
G.add_edges_from([('131', '221')])
#
G.add_edges_from([('121', '13')]) # node may not with "in_degree" link only
G.add_edges_from([('131', '21')]) # ditto
#
G.add_edges_from([('131', '31')])
G.add_edges_from([('131', '11')])
G.add_edges_from([('11', '131')])
G.add_edges_from([('121', '131')])
# "121", with more than one link to higher level in same group? (node edge type "unsure", may in_degree or out_degree or both, same in following question)
print "more than one link to higher level in same group"
for node in G:
l = len(node)-1 # higher level
others = [n for n in G.successors(node)+G.predecessors(node)
if len(n)==l and n[0]==node[0]]
if len(others) > 1:
print node
# "131", with more than one link to higner level nodes to other group?
print "more than one link to higher level in same group"
for node in G:
l = len(node)-1 # higher level
others = [n for n in G.successors(node)+G.predecessors(node)
if len(n)==l and n[0]!=node[0]]
if len(others) > 1:
print node
# "131", with links to same level nodes in same group
print "same level, same group"
for u,v in G.edges():
if len(u) == len(v):
if u[0] == v[0]:
print u
# "131", with links to same level nodes but in other group
print "same level, other group"
for u,v in G.edges():
if len(u) == len(v):
if u[0] != v[0]:
print u
# "21", with links to lower level nodes in different group
print "same level, other group"
for u,v in G.edges():
if len(u) == len(v)-1:
if u[0] != v[0]:
print u
</code></pre>