2017-09-07 15 views
0

這裏是我的問題,在列表中的對象進行的變化如何影響所有元素

from Link import Link 

def generateCompartibleLinks(linksList): 
    count =0 
    updatedList =[] 
    for i,item in enumerate(linksList): 
     link = linksList[i]; 
     for j,item in enumerate(linksList): 
      if not linksList[i].sharesNode(linksList[j]): 
       link.addCompartibleLink(linksList[j]) 
     updatedList.append(link) 
     print len(updatedList[i].compartibleLinks) 
    return updatedList 

link1 = Link("a","b",5) 
link2 =Link("b","c",1) 
link3 = Link("d","b",3) 
link4 =Link("d","c",2) 

list1 = [link2,link1,link3,link4] 

list1 = generateCompartibleLinks(list1) 

for link in list1: 
    print str(len(link.compartibleLinks))+" : "+link.getLinkInfo() 

我希望每一個環節(鏈接1,鏈接2,LINK3,LINK4)有一組不同的compartibleLinks,但一旦對列表中的任何元素進行了更改,它就會反映在每個元素上,這不是我想要的。 這裏是班級鏈接。

class Link(object): 
    sendNode =None 
    rcvNode =None 
    timesToSchedule =1 
    isScheduled = False 
    compartibleLinks = [] 
    def __init__(self,sendNode,rcvNode,timesToschedule): 
     self.sendNode=sendNode 
     self.rcvNode = rcvNode 
     self.timesToSchedule =timesToschedule 

    def reduceTimeToSchedule(self): 
     self.timesToSchedule -=1 
     if self.timesToSchedule<=0: 
      self.timesToSchedule=0 

    def needsToschedule(self): 
     if self.timesToSchedule==0: 
      return False 
     else: 
      return True 
    def addCompartibleLink(self,link): 
     self.compartibleLinks.append(link) 
    def isCompartible(self,link): 
     return any(l == link for l in self.compartibleLinks); 
     #if the link is not found in the set. 
     return False; 
    def sharesNode(self,link): 
     return (self.sendNode==link.sendNode or self.rcvNode==link.rcvNode or self.rcvNode==link.sendNode or self.sendNode==link.rcvNode) 
    def getLinkInfo(self): 
     return 'sender: '+ self.sendNode+" , rec:"+self.rcvNode 

我也想看看,似乎與我的問題,但沒有真正爲我工作的各種解決方案。

+0

這是因爲您每個類只有一個列表,在實例中共享。看到重複。 –

+0

謝謝讓我看看! –

+0

謝謝!你已經救了我的一天。花了幾天搞亂了! –

回答

-1

如果我正確地理解了你的要求,那麼我建議你使用內置的map函數來將一個給定的函數應用於迭代(即你的列表)。當然你必須修改generateCompatibleLinks函數來接受一個鏈接而不是整個列表。

+0

我可以得到一個解釋,爲什麼我的答案是downvoted?先謝謝你! – kingJulian

+0

感謝您的支持。我能夠發現問題。這是關於在構造函數之外初始化分隔列表的列表。我沒有失望:-)。我感謝您的幫助。 –

相關問題