Python返回空列表

时间:2016-06-05 07:47:13

标签: python list recursion graph

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。

1 个答案:

答案 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

所以我希望这应该按照您的意愿运作。