连接对端节点

时间:2014-03-28 11:33:01

标签: python python-2.7 networkx

我有两个相等长度且在networkx中彼此平行的线图,我如何在图形上循环并连接具有两个边缘的相对节点,即连接2& 2a,3& 3a等

nodes1 = [2,5,7,8,9,10]

nodes2 = ['2a','5a','7a','8a','9a','10a']

我试过

for k in range (0, len(nodes1)):
    for i in range (0, len(nodes2)):
        if nodes1.index(kk) == nodes2.index(i):
            X.add_edge(k,i)

但它能给出所需的输出,请任何人都能纠正我。感谢

               This is what I have 
          2---------3---------4----------5----------6



          2a---------3a-------4a--------5a---------6a


                 This is what I want 
            2---------3---------4----------5-----------6
            ||        ||        ||         ||         ||
            ||        ||        ||         ||         ||
            ||        ||        ||         ||         ||
           2a--------3a---------4a---------5a---------6a

如果上一篇文章不清楚,请注意

2 个答案:

答案 0 :(得分:2)

您的代码不能正常工作的原因是因为index返回值所在列表中的索引,因此您从0循环到每个列表的长度和第一个值{{1您的列表中不存在引发0的内容。请参阅在线文档:http://docs.python.org/2/tutorial/datastructures.html

如果您只想创建元组对并假设长度和排序已经正确,那么如果您使用此行修改代码:

ValueError

可以实现您想要的并行浏览两个列表,即使for k in range (0, len(nodes1)): X.add_edge(nodes1[k],nodes2[k]) 没有引发index原始代码也会导致ValueError条目为5 x 5nodes2中每个节点的每个条目添加一条边,这不是您想要的。

假设您的订单与两个列表匹配,那么您可以执行列表推导以创建边缘列表并从此创建图表

node1

修改

如果你想在两个方向上添加边缘,那么你只需通过交换列表的顺序来创建一个二级edge_list:

In [171]:

edge_list = [(nodes1[i], nodes2[i]) for i in range(len(nodes1))]
# I'm using python 3 so you could do the following also
# edge_list = list(zip(nodes1, nodes2))
G=nx.DiGraph()
G.add_edges_from(edge_list)
G.edges()
Out[171]:
[(2, '2a'), (5, '5a'), (7, '7a'), (8, '8a'), (9, '9a'), (10, '10a')]

答案 1 :(得分:0)

使用zip()方法

>>>> zip(nodes1, nodes2)
[(2, '2a'), (5, '5a'), (7, '7a'), (8, '8a'), (9, '9a'), (10, '10a')]