subgraph_view#
- subgraph_view(G, *, filter_node=<function no_filter>, filter_edge=<function no_filter>)[source]#
G
应用节点和边过滤器的视图。subgraph_view
提供了一个输入图的只读视图,该视图根据两个过滤函数filter_node
和filter_edge
的结果排除节点和边。filter_node
函数接受一个参数 — 节点 — 并返回True
如果该节点应包含在子图中,返回False
则不包含。filter_edge
函数接受两个(如果是多图则三个)参数 — 描述一条边的节点,如果可能存在平行边则加上边键 — 并返回True
如果该边应包含在子图中,返回False
则不包含。节点和边过滤函数在查询图元素时被调用,这意味着创建视图没有前期成本。
- Parameters:
- Returns:
- graphnetworkx.Graph
输入图的只读图视图。
Examples
>>> G = nx.path_graph(6)
过滤函数对节点进行操作,并返回
True
如果该节点应出现在视图中:>>> def filter_node(n1): ... return n1 != 5 >>> view = nx.subgraph_view(G, filter_node=filter_node) >>> view.nodes() NodeView((0, 1, 2, 3, 4))
我们可以使用闭包模式根据附加数据过滤图元素 — 例如,基于附加到图的边数据进行过滤:
>>> G[3][4]["cross_me"] = False >>> def filter_edge(n1, n2): ... return G[n1][n2].get("cross_me", True) >>> view = nx.subgraph_view(G, filter_edge=filter_edge) >>> view.edges() EdgeView([(0, 1), (1, 2), (2, 3), (4, 5)])
>>> view = nx.subgraph_view( ... G, ... filter_node=filter_node, ... filter_edge=filter_edge, ... ) >>> view.nodes() NodeView((0, 1, 2, 3, 4)) >>> view.edges() EdgeView([(0, 1), (1, 2), (2, 3)])