PrefixTree插入方法给出无

时间:2018-11-15 07:23:57

标签: python

创建一个PrefixTree,直到我尝试递归执行的insert函数之前都没问题。

class SimplePrefixTree:
    def __init__(self, weight_type: str) -> None:
        self.value = []
        self.weight = 0
        self.subtrees = []
        self.weight_type = weight_type

    def insert(self, value: Any, weight: float, prefix: List) -> None:
        new_tree = SimplePrefixTree(self.weight_type)
        if prefix == []:  # if prefix list is empty
            self.value = value
            self.weight = weight
        elif len(prefix) == 1:  # if prefix list has 1 item
            new_tree.value = prefix
            new_tree.weight = weight
            new_tree.subtrees.append(SimplePrefixTree(self.weight_type).insert(value, weight, []))
            self.subtrees.append(new_tree)

现在,当我尝试运行此命令时:

>>> a = SimplePrefixTree('sum')
>>> a.insert('a', 20, ['a'])
>>> a.subtrees
[<SimplePrefixTree object at 0x1171e9da0>]
>>> a.subtrees[0].subtrees
[None]

这毫无意义,因为我创建了一个类对象,然后调用了该方法,并且第一次运行成功,但是 elif 类对象实例返回None。我还测试了 if 函数是否起作用,并且属性确实发生了突变。

1 个答案:

答案 0 :(得分:2)

这是正确的,因为存储在subtrees变量中的值是SimplePrefixTree,所以发生了

>>> a.subtrees
[<SimplePrefixTree object at 0x1171e9da0>]

因此,它将在数组中存储第二个SimplePrefixTree的位置,如果您想使其更具吸引力或显示值,则应在SimplePrefixTree类中添加 repr ()方法。 / p>

关于这一部分:

>>> a.subtrees[0].subtrees
[None]

这是因为第二个SimplePrefixTree的subtrees变量中没有存储任何值。

无论如何,我的意思是,您的代码完全按照应有的方式工作,也许您只是对指针值感到困惑。

很抱歉造成混乱的解释,希望它能帮助您了解正在发生的事情。