2017-04-26 31 views
0

交換兩個元素我已經寫了一個稱爲邊緣種類一些像這樣的麻煩:當Python列表

class Edge: 
    def __init__(self): 
     ... 
    ... 

然後我產生一些邊緣

a1 = Edge() 
a2 = Edge() 
a3 = Edge() 
graph = [a1,a2,a3] 

現在我想換了A1, A3。所以我寫道:

graph[0],graph[2] = graph[2],graph[0] 

我認爲圖表已經被這樣交換。

>>>graph 
>>>[a3,a2,a1] 

,但結果是圖形還是起源graph>>>[a1,a2,a3] 所以我想問一下爲什麼這個happend?有沒有其他的解決方案來交換圖表?

+0

你能寫一個真正簡短的代碼片段嗎?如果沒有,那麼可能圖形或邊緣覆蓋某個操作符。它按預期工作,l = [1,2,3]; l [2],l [0] = 1 [0],l [2];打印l –

+0

我相信列表元素已被交換,但其他事情是錯誤的。你如何分辨a1,a2和a3之間的區別? –

回答

0
graph = [graph[i] for i in [2, 1, 0]] 

或更一般的情況:

def swap(g, i, j): 
    tmp = g[i] 
    g[i]= g[j] 
    g[j] = tmp 

graph = swap(graph, i, j) 
+0

如果列表中有1000個元素,這是如何交換列表中的兩個元素的? –

+1

這對我來說似乎很浪費。 –

0

它按預期工作。

class Edge: 

    def __init__(self): 
     self.pred = 0 
     self.succ = 0 
     self.weight = 1 
     self.name = '' 

    def __init__(self, p, s, w, strName): 
     self.pred = p 
     self.succ = s 
     self.weight = w 
     self.name = strName 

a1 = Edge(0,1,1,'a1') 
a2 = Edge(1,2,3,'a2') 
a3 = Edge(2,3,5,'a3') 


a = [a1, a2, a3] 
print(a[0].name) 
a[1], a[0] = a[0], a[1] 
print(a[0].name) 

輸出是 A1 A2 如預期。

+0

明白了,非常感謝 – xiaoli