Python 获取节点列表中的边

Python 获取节点列表中的边,python,networkx,Python,Networkx,如何获取其两个节点都位于给定节点列表中的所有边G.edges([list\u of_nodes])将返回每个边中至少有一个节点位于list\u of_nodes中的所有节点。我不想那样。我怎样才能得到它 您可以循环遍历已找到的所有边,并测试两个节点是否都在节点列表中,但如果节点列表很大,则这不是最佳选择。检查列表是否包含元素需要在列表中迭代,因此每个边平均需要2*len(list)/2检查[len(list)/2每个节点]。假设边的数量与len(list)成正比,则这具有二次时间 edges =

如何获取其两个节点都位于给定节点列表中的所有边
G.edges([list\u of_nodes])
将返回每个边中至少有一个节点位于
list\u of_nodes
中的所有节点。我不想那样。我怎样才能得到它

您可以循环遍历已找到的所有边,并测试两个节点是否都在节点列表中,但如果节点列表很大,则这不是最佳选择。检查列表是否包含元素需要在列表中迭代,因此每个边平均需要
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]

可以循环遍历已找到的所有边,并测试两个节点是否都在节点列表中,但如果节点列表较大,则这不是最佳选择。检查列表是否包含元素需要在列表中迭代,因此每个边平均需要
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]

请给我一些关于否决票的线索?轻微的提示:“我不想要那个。我怎么能得到它?”还有这个:我不明白。是不是为了不那么谦虚?如果是这样的话,我的观点是“我写这行是为了说明我想做什么和不想做什么。我想,我真的应该澄清一下。”。谢谢,请给我一些关于否决票的线索?轻微的提示:“我不想要那个。我怎么能得到它?”还有这个:我不明白。是不是为了不那么谦虚?如果是这样的话,我的观点是“我写这行是为了说明我想做什么和不想做什么。我想,我真的应该澄清一下。”。谢谢,我也这么做。但是它非常慢,因为我有数百万条边。你使用的是
集合\u节点
而不是
列表\u节点
?我在你回答之前就开始使用列表,速度非常慢。现在我用的是set,速度很快。非常感谢,我也这么做。但是它非常慢,因为我有数百万条边。你使用的是
集合\u节点
而不是
列表\u节点
?我在你回答之前就开始使用列表,速度非常慢。现在我用的是set,速度很快。多谢各位