Networkx:如何删除单向边缘?

时间:2018-08-10 20:46:12

标签: python networkx

假设我在[(1,2),(2,1),(1,3)]之间有边,如何删除(1,3),因为它不像1和2之间的边那样是双向的?

2 个答案:

答案 0 :(得分:0)

我假设这是一个DiGraph。在这种情况下,首先找到要删除的边缘。然后删除它们。

to_remove = [(v,u) for v,u in G.edges() if not G.has_edge(u,v)]
G.remove_edges_from(to_remove)

列表to_remove具有GG没有相反边缘的所有那些边(这是列表理解)。

答案 1 :(得分:0)

这个比较长,但是不要直接修改边缘

import networkx as nx

# create the graph
G = nx.DiGraph()   
G.add_edges_from([(1,2),(2,1),(1,3),(4,1),(1,5),(1,6),(5,1)])

H = nx.difference(G.to_undirected().to_directed(), G) # get the uni-directional edges
G = nx.difference(G, H.to_undirected())               # get the difference graph
G.edges()
# [(1, 2), (1, 5), (2, 1), (5, 1)]