python - Python的层次结构遍历和比较模块?

标签 python tree module hierarchy traversal

我在日常开发中处理很多层次结构。文件系统、Autodesk Maya 中的嵌套 DAG 节点等。

我想知道,Python 有没有专门设计用于遍历和比较对象层次结构的好模块?

特别感兴趣的是在两个几乎相同的层次结构之间进行“模糊”比较的方法。这样做的部分原因是为了匹配来自两个不同角色的 Maya 中的两个节点层次结构,以便将动画从一个角色转移到另一个角色。

根据我一直在阅读的内容,我可能需要一些具有名称阈值(我可以自己构建)的东西来比较两个节点名称彼此之间的接近程度。然后我需要一种方法来选择性地忽略子节点在层次结构中出现的顺序。最后,我需要处理深度阈值,以防节点在层次结构中略微向上或向下移动。

最佳答案

我不确定是否需要一个完整的模块——层次结构是一种设计模式,每个层次结构都有足够多的独特功能,很难一概而论。

class Node( object ):
    def __init__( self, myData, children=None )
        self.myData= myData
        self.children= children if children is not None else []
    def visit( self, aVisitor ):
        aVisitor.at( self )
        aVisitor.down()
        for c in self.children:
            aVisitor.at( c )
        aVisitor.up()

class Visitor( object ):
    def __init__( self ):
        self.depth= 0
    def down( self ):
        self.depth += 1
    def up( self ):
        self.depth -= 1

我发现这就是我所需要的。而且我发现很难从中创建一个可重用的模块,因为 (a) 这里的代码太少,以及 (b) 每个应用程序添加或更改的代码太多。

此外,我发现最常用的层次结构是文件系统,为此我有 os 模块。第二个最常用的层次结构是 XML 消息,为此我有 ElementTree(通常通过 lxml)。在这两个之后,我使用上面的结构作为我的类的模板,而不是作为一个真正的可重用模块。

关于python - Python的层次结构遍历和比较模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/664898/

相关文章:

python - Python-randint()返回空范围,崩溃错误

python - 为什么我的迭代器实现效率很低?

MFC应用程序突然崩溃

快速点查找和视线遍历算法

javascript - NestJS:动态模块的缺点?

python - 添加 numpy 数组时避免溢出

python - 即使存在元素,WebdriverWait 也会失败

vb.net - 从字符串中解析多树

linux - 如何在 Elastix 模块中包含 javascript

amazon-web-services - terraform aws 将实例列表从一个模块传递到另一个模块