Cod*_*lus 9 python set conditional-statements networkx
在python库networkx中,我想删除具有某些属性的图的节点和边.例如,假设我想删除节点程度<2的所有节点和边缘.请考虑以下psuedocode:
vdict = g.degree_dict() #dictionary of nodes and their degrees
g.remove_from_nodes(v in g s.t. vdict[v] < 2)
Run Code Online (Sandbox Code Playgroud)
我已经看到一些使用集合论符号的语法,但因为我仍然是python的新手,我不知道如何使用它.我如何将其转换为工作python代码?
Ari*_*ric 15
Graph.remove_nodes_from()方法获取节点的列表(实际上是容器).所以你只需要创建一个满足你条件的列表.您可以使用Python的列表推导结构来紧凑地创建要删除的节点列表.
In [1]: import networkx as nx
In [2]: G = nx.Graph()
In [3]: G.add_edge(1,2)
In [4]: G.add_edge(1,3)
In [5]: G.add_edge(1,4)
In [6]: G.add_edge(2,3)
In [7]: G.add_edge(2,4)
In [8]: G.degree()
Out[8]: {1: 3, 2: 3, 3: 2, 4: 2}
In [9]: remove = [node for node,degree in G.degree().items() if degree > 2]
In [10]: remove
Out[10]: [1, 2]
In [11]: G.nodes()
Out[11]: [1, 2, 3, 4]
In [12]: G.remove_nodes_from(remove)
In [13]: G.nodes()
Out[13]: [3, 4]
Run Code Online (Sandbox Code Playgroud)
如果我们有一个初始化图形g下面将设置f是g受约束的是每个顶点都要有个度> 0。我们可以很容易地用一个变量概括0:
f = nx.Graph()
fedges = filter(lambda x: g.degree()[x[0]] > 0 and g.degree()[x[1]] > 0, g.edges())
f.add_edges_from(fedges)
Run Code Online (Sandbox Code Playgroud)