如何获得两个节点都在给定节点列表中的所有边。 G.edges([list_of_nodes])
将返回每个边缘的至少一个节点位于list_of_nodes
中的所有节点。我不要那个。我怎么才能得到它?
答案 0 :(得分:2)
您可以遍历已经找到的所有边缘并测试两个节点是否都在节点列表中,但如果节点列表很大,则这不是最佳选择。检查列表是否包含元素需要遍历列表,因此平均每个边缘对每个节点进行2*len(list)/2
检查[len(list)/2
]。假设边的数量与len(list)
成比例,则这具有二次时间。
edges = [(u,v) for u,v in G.edges(list_of_nodes) if u in list_of_nodes and v in list_of_nodes]
更有效的方法是测试节点是否在集合而不是列表中。集允许非常快速地检查它们是否包含元素。每次测试几乎O(1)
。所以完整的东西在线性时间内运行。
set_of_nodes = set(list_of_nodes)
edges = [(u,v) for u,v in G.edges(set_of_nodes) if u in set_of_nodes and v in set_of_nodes]