从列表中添加边时如何阻止 Networkx 更改边的顺序?
How to stop Networkx from changing the order of edges when adding them from a list?
在 NetworkX (python) 中将列表中的边添加到图形中会更改边的顺序,这会导致我在绘制图形时出现问题。
例如:
import networkx as nx
airports = ['A','B','C']
edgelst = [['C','B'],['A','B'],['A','C']]
G = nx.Graph()
G.add_nodes_from(airports)
G.add_edges_from(edgelst)
这是我检查网络中现有边的结果:
>>> G.edges()
[('A', 'C'), ('A', 'B'), ('C', 'B')]
NetworkX 已按字母顺序对边进行排序,但我只希望它们与 edgelst 的顺序相同。我怎样才能做到这一点?
您的问题的答案有点混乱,因为 NetworkX Graph
class 不保留边中节点的顺序。然而,这可以通过对每条边进行排序以保证节点顺序来规避。 G.edges()
也可以通过自定义键排序,该键检索每条边出现在边列表中的索引。
import networkx as nx
edgelist = [['C','B'],['A','B'],['A','C']]
首先,对每条边中的节点进行排序,并创建一个字典,将每条边映射到其在边列表中的索引:
edgelist = [sorted(edge) for edge in edgelist]
mapping = {tuple(edge): index for (edge, index) in zip(edgelist, range(len(edgelist)))}
然后根据边列表中的索引边对图边的顺序进行排序:
G = nx.Graph()
G.add_edges_from(edgelist)
sorted(G.edges(), key=lambda edge: mapping[tuple(sorted(list(edge)))])
如果你使用遍历算法,你可以得到边在路径中被访问的顺序
```
paths = nx.all_simple_paths(G, source=0, target=3)
for path in map(nx.utils.pairwise, paths):
... print(list(path))
[(0, 1), (1, 2), (2, 3)]
[(0, 1), (1, 3)]
[(0, 2), (2, 1), (1, 3)]
[(0, 2), (2, 3)]
[(0, 3)]
```
在 NetworkX (python) 中将列表中的边添加到图形中会更改边的顺序,这会导致我在绘制图形时出现问题。 例如:
import networkx as nx
airports = ['A','B','C']
edgelst = [['C','B'],['A','B'],['A','C']]
G = nx.Graph()
G.add_nodes_from(airports)
G.add_edges_from(edgelst)
这是我检查网络中现有边的结果:
>>> G.edges()
[('A', 'C'), ('A', 'B'), ('C', 'B')]
NetworkX 已按字母顺序对边进行排序,但我只希望它们与 edgelst 的顺序相同。我怎样才能做到这一点?
您的问题的答案有点混乱,因为 NetworkX Graph
class 不保留边中节点的顺序。然而,这可以通过对每条边进行排序以保证节点顺序来规避。 G.edges()
也可以通过自定义键排序,该键检索每条边出现在边列表中的索引。
import networkx as nx
edgelist = [['C','B'],['A','B'],['A','C']]
首先,对每条边中的节点进行排序,并创建一个字典,将每条边映射到其在边列表中的索引:
edgelist = [sorted(edge) for edge in edgelist]
mapping = {tuple(edge): index for (edge, index) in zip(edgelist, range(len(edgelist)))}
然后根据边列表中的索引边对图边的顺序进行排序:
G = nx.Graph()
G.add_edges_from(edgelist)
sorted(G.edges(), key=lambda edge: mapping[tuple(sorted(list(edge)))])
如果你使用遍历算法,你可以得到边在路径中被访问的顺序
```
paths = nx.all_simple_paths(G, source=0, target=3) for path in map(nx.utils.pairwise, paths): ... print(list(path)) [(0, 1), (1, 2), (2, 3)] [(0, 1), (1, 3)] [(0, 2), (2, 1), (1, 3)] [(0, 2), (2, 3)] [(0, 3)] ```