2016-06-05 3 views
1
class Map(): 

    def returnWay(self, node1, node2): 
     final_list = [] 
     temp_list = [] 
     self._returnWay(node1, node2, final_list, temp_list) 
     return final_list 

    def _returnWay(self, node1, node2, final_list, temp_list): 
     if node1 not in temp_list: 
      temp_list.append(node1) 
      if node1 == node2: 
       final_list.append(temp_list) 
       del temp_list[-1] 
      else: 
       for x in node1.nexts(): 
        self._returnWay(x, node2, final_list, temp_list) 
       del temp_list[-1] 


path = Map() 

for x in path.returnWay(node1, node2): 
    print x 

좋아 얘들 아, 내가 여기 파이썬 반환 빈 목록

나는 기존의 모든를 얻으려고 ... 정말 영어를, 그래서 말하기 몇 가지 실수를하면 실례하지 않습니다 두 노드 사이에는 4 가지 방법이 있지만 대신 4 가지 빈 목록이 있습니다.

"for x in temp_list : print x"줄에 13을 넣으면 4 가지 방법이 모두 인쇄되지만 어떤 이유로 final_list에 추가되지 않습니다.

+0

Plase, 충분히 명확하지 않거나 좀 더 자세한 정보를 제공 할 수 있는지 알려주세요. – RomanVenica

+1

초기 노드 (즉,'node1 == node2')로 돌아 오면'del temp_list [-1]'을 두 번, 한 번 반환하기 전에 한 번 그리고 반환 한 후에 두 번 호출합니다. 나는 당신의 코드가 어떻게 작동해야하는지 잘 모르겠다. 그러나 이것은 내가 처음 공격하는 생각이다. – dhke

+0

답변 해 주셔서 감사합니다. Node1과 Node2가 일치 할 때 더 이상 이유가 없어지기 때문에 첫 번째 del이 있습니다. 그리고 두 번째 것은 모든 adyacents 노드가 방문되었을 때 발생합니다. 그래서 이전의 방법을 볼 수 있습니다. – RomanVenica

답변

1

노드 1이 정의되지 않았기 때문에 코드를 내 컴퓨터에서 실행할 수 없습니다.

그러나 문제가 발견 된 것 같습니다. 파이썬에서 temp_list를 final_list에 추가하면 temp_list에서 변경 한 사항이 모두 final_list에도 적용됩니다.

내가 터미널이 밖으로 시도, 이쪽을 봐 :

>>> a = ['a', 'b', 'c'] 
>>> e = 'd' 
>>> a.append(e) 
>>> a 
['a', 'b', 'c', 'd'] 
>>> flist=[] 
>>> flist.append(a) 
>>> flist 
[['a', 'b', 'c', 'd']] 
>>> del a[-1] 
>>> a 
['a', 'b', 'c'] 
>>> flist 
[['a', 'b', 'c']] 

솔루션 전체 목록 사본을 작성하고 최종 목록에이를 넣어하는 것입니다. 즉시 전체 목록 사본이 어떻게 생성됩니까? temp_list [:] 그래서 여기 내 해결책 :

class Map(): 

    def returnWay(self, node1, node2): 
     final_list = [] 
     temp_list = [] 
     self._returnWay(node1, node2, final_list, temp_list) 
     return final_list 

    def _returnWay(self, node1, node2, final_list, temp_list): 
     if node1 not in temp_list: 
      temp_list.append(node1) 
      if node1 == node2: 
       final_list.append(temp_list[:]) 
       del temp_list[-1] 
      else: 
       for x in node1.nexts(): 
        self._returnWay(x, node2, final_list, temp_list[:]) 
       del temp_list[-1] 


path = Map() 

for x in path.returnWay(node1, node2): 
    print x 

그래서 나는 이것이 당신이 원하는대로 작동해야합니다.

+0

귀하의 답변은 정말 유용합니다. 시간 내 주셔서 대단히 감사합니다. 이것은 내가 기다리고 있던 것이 었습니다. – RomanVenica

+1

나는 나의 교정이 정확했으면 좋겠다. 위에서 언급했듯이 충분한 정보가 제공되지 않아 내 컴퓨터에서 코드를 실행할 수 없기 때문에 확인할 가능성이 없습니다. – jojo31

+1

오, 환영합니다!)) – jojo31