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个空列表。
如果我在第13行“放入temp_list中的x:print x”它会打印所有4种方式,但由于某种原因它不会将它们添加到final_list。
答案 0 :(得分:1)
您的代码无法在我的计算机上运行,因为未定义node1。
但我认为我发现了问题: 在Python中,如果你将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
所以我希望这应该按照您的意愿运作。