Список преемников преемников в DiGraph в Networkx - PullRequest
1 голос
/ 22 апреля 2020

Я работаю над функцией, которая создает семейное дерево с использованием ориентированного графа в сети x, где узлами являются члены семьи с датой рождения в качестве атрибута узла. Теперь я хочу сделать другую функцию, которая с учетом графа G и имени узла возвращает отсортированный список всех «внуков» этого узла. В общем, я делаю это:

return sort(G.successors(G.successors(node)))

Но поскольку G.successors возвращает список преемников, это не работает.

Как бы вы подошли к этому?

Спасибо!

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете написать свою собственную функцию для этой задачи. Если вы уверены, что DiGraph - это дерево, вы можете заменить set() на list. Пожалуйста, также добавьте минимальный воспроизводимый пример с желаемым результатом в ваших следующих вопросах.

import networkx as nx

family_tree = nx.DiGraph()

family_tree.add_edges_from([("GP", "P1"), ("GP", "P2"), ("P1", "S1"), ("S1", "GS1"), ("P1", "S2")])

def successors_of_successors(graph, node):
    results = set()
    for successor in graph.successors(node):
        results.update(graph.successors(successor))

    return results

print(successors_of_successors(family_tree, "GP"))
# {'S2', 'S1'}
print(successors_of_successors(family_tree, "P1"))
# {'GS1'}
...