gpt4 book ai didi

python - 层次结构中的树构建器和打印节点

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:22 25 4
gpt4 key购买 nike

有没有更好的办法是打印一棵树?我正在做以下事情。我正在使用以下代码构建一棵树。我到底犯了什么错误?它给出了以下错误

      63         ret = "\t"*level+repr(self.label)+"\n"          
64 for child in self.children:
---> 65 ret += child.__str__(level+1)
66 return ret
67

TypeError: expected 0 arguments, got 1

下面附上代码

from collections import Counter
from sets import Set

class treenode:
def __init__(self, values):
self.label = values
self.children = {}

def __str__(self, level=0):
ret = "\t"*level+repr(self.label)+"\n"
for child in self.children:
ret += child.__str__(level+1)
return ret

def __repr__(self):
return '<tree node representation>'

def build_tree(featurerange, featureid, counts):
if len(sorted(counts)) > 1:
featuresLeft = featurerange - Set([featureid])
if not featuresLeft:
rootnode.children[v] = treenode(counts.most_common(1)[0][0])
else:
rootnode.children[v] = build_tree(featuresLeft)
else:
rootnode.children[v] = treenode(counts.most_common(1)[0][0])

return rootnode

featurerange = set([0, 1])
featureid = 1
counts = Counter({'-': 49, '+': 45})

tree = build_tree(featurerange, featureid, counts)
str(tree)
print tree

最佳答案

您正在将 children 设置为默认为空字典:

def __init__(self, values, children = {}):

实例之间共享。然后,您继续用以下方法替换相同的 key :

rootnode.children[v] = treenode(counts.most_common(1)[0][0])

其中 v 是全局的;你没有在你的问题中分享它,所以我不知道那是什么类型的对象。

遍历 self.children 然后遍历字典的 keys:

for child in self.children:

child 不是 treenode 实例,因此 __str__ 方法不接受额外的参数。相反,它是一个 v 值,但它显然没有实现采用额外参数的 object.__str__ 方法。

也许您想将 children 改为一个列表?无论如何,您的代码中有几个问题需要解决:

  • 您在这里使用了一个可变的默认参数,您正在创建一个 字典并且您的所有实例都共享它。参见 "Least Astonishment" and the Mutable Default Argument为什么你想避免这种情况。使用:

    def __init__(self, values, children=None):
    if children is None:
    children = {}
  • 您似乎在 build_tree() 中使用了一个全局的 v;您真的需要使用字典和字典中的一个键吗? children 不应该是一个序列或集合吗?如果是这样,请使用 list.append()set.add() 增加子项的集合。

  • 您似乎在使用 deprecated sets.Set() object ;使用 built-in set() type相反。

方法本身,如果您实际遍历一组 treenode 对象,就可以正常工作。您可以遍历字典的值,也许:

for child in self.children.values():

关于python - 层次结构中的树构建器和打印节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com