0

我有一个如下所示的 NetworkX 图。

g = nx.DiGraph()
g.add_edge('a', 'b')
g.add_edge('b', 'c')
g.add_edge('b', 'd')
g.add_edge('b', 'e')
g.add_edge('e', 'f')

我有一个 Python 函数getHop,它需要两个参数。一个是node,另一个是hop

getHop(node, hop):

如果节点是f并且跳是1然后getHop应该返回父节点f。在这种情况下,它是e

如果节点是f并且跳是2那么getHop应该返回的祖父节点f。在这种情况下,它是b

如果节点是f并且跳是3那么getHop应该返回的曾祖父节点f。在这种情况下,它是a

如何在 NetworkX 中实现上述场景。请告诉我。提前致谢。

4

1 回答 1

3

我不知道 networkx 库中允许您执行此操作的函数,但是通过函数中的循环构建应该相当简单,请参见下面的示例,该示例应该会产生您的结果:

请记住,前任函数返回一个迭代器,因此将函数的结果插入列表并获得第一个值更简单https://networkx.github.io/documentation/stable/reference/classes/generated/networkx .DiGraph.predecessors.html

def getHop(node, hop):
    if hop == 1: 
        result = list(g.predecessors(node))[0]
    else: 
        for hop_element in range(hop): 
            if hop_element == 0: 
                temp_result = list(g.predecessors(node))[0]
            elif hop_element +1 == hop:
                result = list(g.predecessors(temp_result))[0]
            else: 
                temp_result = list(g.predecessors(temp_result))[0]
    return result
于 2020-04-08T15:35:58.373 回答