2014-03-28 58 views
1

我具有相等的長度並平行於networkx彼此的兩個線形圖,如何能i循環通過圖表和相對節點與兩個邊緣連接即連接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) 

但它dosent得到所需要的輸出請任何人都可以指正。由於

   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循環到每個列表的長度並且第一個值0在您的列表中不存在,它會拋出一個ValueError。請參閱在線文檔:​​

如果你只是想創建的元組對假設的長度和順序已經正確的,那麼,如果你用下面這行修改代碼:

for k in range (0, len(nodes1)): 
    X.add_edge(nodes1[k],nodes2[k]) 

將實現你想要的是什麼即使index沒有產生ValueError也不會產生ValueError將導致5 x 5條目,因爲您正在爲node1中的每個節點的nodes2中的每個條目添加邊緣,這不是您想要的。

假設你的排序兩個列表相匹配,那麼你可以做一個列表的理解,從這個

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

編輯

創建邊緣名單,並創建您的圖表如果你想添加邊緣那麼您只需創建一個輔助edge_list,就像通過交換列表的順序一樣:

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)] 
+0

@Ed感謝的代碼片段的作品和你的深思熟慮的意見。請問我將如何着手在這些節點之間添加雙邊線。謝謝 – Nobi

+0

@Nobi是你的圖嗎?或一個ordingary圖?我將更新我的答案 – EdChum

+0

@Ed這是一個有向圖謝謝 – Nobi

0

使用zip()方法

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

感謝您的想法 – Nobi