Python 树结构的链接对象
我想建立一个树结构,可以很容易地构建,而不必记住分支的确切名称。我知道这个问题已经讨论过了,哪种解决方案很好,但它仍然要求必须记住密钥的确切名称。通过以下解决方案,我可以使用自动完成:Python 树结构的链接对象,python,Python,我想建立一个树结构,可以很容易地构建,而不必记住分支的确切名称。我知道这个问题已经讨论过了,哪种解决方案很好,但它仍然要求必须记住密钥的确切名称。通过以下解决方案,我可以使用自动完成: class tree_dot: """ A class to create a tree structure """ def __init__(self, name): self.name = name self.branches = [] def add_branch(self,branch
class tree_dot:
""" A class to create a tree structure """
def __init__(self, name):
self.name = name
self.branches = []
def add_branch(self,branch_name):
""" A method to add a branch to the tree which is itself a tree object """
a = tree_dot(branch_name)
setattr(self, branch_name, a)
self.branches.append(a)
输出如下所示:
>>> Tree = tree_dot('Tree')
>>> Tree.add_branch('First')
>>> Tree.First.add_branch('Second')
>>> Tree.First.Second.add_branch('Third')
>>> Tree.First.Second.Third.name = 'This is the third branch !'
但是,我对这么长的名字感到不舒服。这会造成问题吗?有更好的方法吗?因为它是递归的,在某种程度上不可能避免这么多点。就使用类来表示递归结果而言,这是正常的
如果要避免记住键名,可以始终添加一个默认属性,即连接列表:
Tree.c[0].c[0].c[1]
,或任何存在的索引
另一种方法是使用键/值系统。我有时做的事情是:
(['first','second','third'], tree_dot())
这是记住钥匙的好方法。特别是如果您需要网络问题之类的应用程序(如旅行推销员),这可能非常有用,因为它可以存储在平面阵列中(使比较和其他功能更容易),而不会丢失数据。由于它是递归的,在一定程度上不可能避免这么多点。就使用类来表示递归结果而言,这是正常的
如果要避免记住键名,可以始终添加一个默认属性,即连接列表:
Tree.c[0].c[0].c[1]
,或任何存在的索引
另一种方法是使用键/值系统。我有时做的事情是:
(['first','second','third'], tree_dot())
这是记住钥匙的好方法。特别是如果您需要网络问题之类的应用程序(例如旅行推销员),这会很有用,因为它可以存储在平面阵列中(使比较和其他功能更容易),而不会丢失数据。谢谢您的回答。它似乎很有用,但它忽略了我觉得很方便的自动完成功能,有点像一个简单的GUI。我也不明白你的:(['first','second','third'],tree_dot()),似乎对我不起作用!谢谢你的回答。它似乎很有用,但它忽略了我觉得很方便的自动完成功能,有点像一个简单的GUI。我也不明白你的:(['first','second','third'],tree_dot()),似乎对我不起作用!