递归创建网络问题中的连接节点列表 - 使用python

时间:2016-12-28 15:22:16

标签: python recursion networkx

我在python中使用networkx包创建了一个简单的图形,如下面的代码所示:

import networkx as nx
import pandas as pd
import numpy as np

G=nx.Graph()

G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_node(4)
G.add_node(5)
G.add_node(6)

G.add_edge(1,2)
G.add_edge(2,3)
G.add_edge(1,5)
G.add_edge(4,6)

然后,我定义了一个接收以下参数的函数:

  • G:网络
  • z:空列表
  • node:从
  • 开始的节点

递归函数:

def recurse(G, z , node):
    z.append(node)
    n = list(set(G.neighbors(node)) - set(z)) 
    if len(n) == 0:
        return []
    else:
        for i in n:
            if i not in z:
                return z.extend(recurse(G, z, i))

并使用以下代码测试了该函数:

z = []
f = recurse(G,z,1)

假设返回以下列表 - > [1,2,3,5]

但在尝试执行代码时遇到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-91-143154073995> in <module>()
     14 
     15 z = []
---> 16 f = recurse(G,z,1)

<ipython-input-91-143154073995> in recurse(G, z, node)
     11         for i in n:
     12             if i not in z:
---> 13                 return z.extend(recurse(G, z, i))
     14 
     15 z = []

TypeError: 'NoneType' object is not iterable

我已经打印了该功能的每一步,并注意到该列表已建立,直到它具有以下值 - &gt; [1,2,3]然后失败

任何想法??

由于

1 个答案:

答案 0 :(得分:1)

list.extend返回None而不是列表扩展。

试试这个:

z.extend(recurse(G, z, i))
return z