获取节点列表中的边缘
问题描述:
如何获得其两个节点均位于给定节点列表内的所有边。 G.edges([list_of_nodes])
将返回所有节点,其中每个边的至少一个节点位于list_of_nodes
中。我不要那个。我怎么才能得到它?获取节点列表中的边缘
答
您可以遍历已经找到的所有边,并测试两个节点是否在节点列表中,但如果节点列表很大,则这不是最优的。检查一个列表是否包含一个元素需要迭代整个列表,所以平均而言,每条边都需要2*len(list)/2
检查[len(list)/2
for each node]。假设边的数量与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]
请给我一些关于投票的线索吗? – sovon
轻微提示:“我不想那样,我怎么能得到它?”另外这个:https://stackoverflow.com/help/how-to-ask – BoboDarph
我不明白。是不是谦虚?如果是这样的话,我的观点是:“我写了这行文字来指定我想做什么,不想做什么,我想,我应该真正澄清”。谢谢 – sovon