所以答案是有點清潔和更容易找到在其誰絆倒未來的人,這裏是我最後使用的代碼:
G = DiGraph() # Creates an empty directed graph G
infile = open(sys.argv[1])
for edge in infile:
edge1, edge2 = edge.split() #Splits data on the space
node1 = int(edge1) #Creates integer version of the node names
node2 = int(edge2)
G.add_edge(node1,node2) #Adds an edge between two nodes
parent1=int(sys.argv[2])
parent2=int(sys.argv[3])
data_successors = dfs_successors(G,parent1)
successor_list = data_successors.values()
allsuccessors = [item for sublist in successor_list for item in sublist]
pos = graphviz_layout(G,prog='dot')
plt.figure(dpi=300)
draw_networkx_nodes(G,pos,node_color="LightCoral")
draw_networkx_nodes(G,pos,nodelist=allsuccessors, node_color="SkyBlue")
draw_networkx_edges(G,pos,arrows=False)
draw_networkx_labels(G,pos,font_size=6,font_family='sans-serif',labels=labels)
它看起來像一個DFS算法可能是我最好的選擇。我沒有使用上面提到的代碼,而是使用了dfs_successors,它看起來像給了我一個來自父級1的所有繼承者的字典。現在只需要將該字典變爲有用的格式。 *討厭*字典。 – Fomite
稍微修改上面的答案,最後使用dfs_successors(G,parent1)確實返回所有後繼的字典,將該字典轉換爲列表,然後奉承該列表http://stackoverflow.com/questions/952914 /製作-A-平列表外的列表,列表功能於蟒/ 952952#952952。感謝兩位評論者的幫助。 – Fomite