<p>首先,您应该以某种方式定义节点所在的组或级别,因为它没有在图istelf中定义,因为附加的边破坏了树结构。
我只是按照您的命名模式编写了以下helper函数,将给定的名称转换为级别/组:</p>
<pre><code>def get_group(node):
if node == '0':
return 1
return int(node[0])-1
def get_level(node):
if node == '0':
return 0
return len(node)
def equal_group(a,b):
return get_group(a) == get_group(b)
def lower_level(a,b):
return get_level(a) < get_level(b)
def equal_level(a,b):
return get_level(a) == get_level(b)
</code></pre>
<p>然后,可以根据您的规范筛选节点:</p>
^{pr2}$
<p>结果如下:</p>
<pre><code>>>>Q1: ['131', '121']
>>>Q2: ['131', '121']
>>>Q3: ['121']
>>>Q4: ['131', '121']
>>>Q5: ['21', '131', '0']
</code></pre>
<p>通常,您可以找到不需要的边,如下所示:</p>
<pre><code>def is_bad_edge(edge):
a, b = edge
if not equal_group(a, b):
return True
if not lower_level(a, b):
return True
return False
bad_edges = filter(is_bad_edge, G.edges_iter())
print 'Bad edges:', bad_edges
</code></pre>
<p>因此:</p>
<pre><code>>>>Bad edges: [('21', '131'), ('131', '11'), ('131', '31'), ('131', '21'), ('131', '221'), ('131', '211'), ('121', '13'), ('121', '131'), ('0', '1'), ('0', '3')]
</code></pre>
<p>如您所见,源于<code>0</code>的边在那里,因为它被分类为组1,但是节点<code>1</code>和节点<code>3</code>不是。根据对节点的分类方式,<code>0</code>可以调整函数以包含或排除根节点。在</p>