我有两个相等长度且在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 :(得分: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 5
中nodes2
中每个节点的每个条目添加一条边,这不是您想要的。
假设您的订单与两个列表匹配,那么您可以执行列表推导以创建边缘列表并从此创建图表
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')]