Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连接相对节点_Python_Python 2.7_Networkx - Fatal编程技术网

Python 连接相对节点

Python 连接相对节点,python,python-2.7,networkx,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(

我在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

很抱歉,如果上一篇文章不清楚,那么代码不能正常工作的原因是索引返回值所在列表中的索引,因此您正在从
0
循环到每个列表的长度,并且列表中不存在第一个值
0
,这会引发
ValueError
。请参阅在线文档:

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

for k in range (0, len(nodes1)):
    X.add_edge(nodes1[k],nodes2[k])
如果要并行遍历这两个列表,则即使原始代码的
index
没有引发
ValueError
错误,也会导致
5 x 5
条目,因为您为
nodes2中的每个条目为
node1
中的每个节点添加了一条边,这不是您想要的

假设两个列表的排序都匹配,那么您可以进行列表理解来创建边列表并从中创建图形

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')]
编辑

如果要在两个方向上添加边,则只需通过交换列表的顺序来创建一个次边列表,如下所示:

In [194]:

edge_list_reversed = list(zip(nodes2, nodes1))
edge_list_reversed
G.add_edges_from(edge_list_reversed)
G.edges()
Out[194]:
[(2, '2a'),
 (5, '5a'),
 (7, '7a'),
 (8, '8a'),
 (9, '9a'),
 (10, '10a'),
 ('2a', 2),
 ('8a', 8),
 ('9a', 9),
 ('5a', 5),
 ('10a', 10),
 ('7a', 7)]
使用方法


@Ed感谢代码片段的工作和您深思熟虑的评论。请问我将如何在这些节点之间添加双边缘。thanks@Nobi你的图是有向图吗?还是一个普通的图形?我会更新我的答案
>>>> zip(nodes1, nodes2)
[(2, '2a'), (5, '5a'), (7, '7a'), (8, '8a'), (9, '9a'), (10, '10a')]