【问题标题】:Easiest way to calculate how deep a structure is? [duplicate]计算结构深度的最简单方法是什么? [复制]
【发布时间】:2018-02-13 01:12:30
【问题描述】:

假设我有一个像这样的 AST 结构(列表列表):

 [+, [*, a,b],[*,c,d] ]
 [+, [*, a,b],[*,c,[ +, d, e] ] ]

什么是计算结构深度的最简单和/或最快的方法,即它有多少层?

作为第二个选项,您也可以将其作为字符串使用,而不是列表列表 (LoL)。 F.e.:

"[+, [*, a,b],[*,c,d] ]"

我可以同时使用。

【问题讨论】:

  • 遍历字符串并通过计数[]来跟踪深度。
  • 仅供参考:根据经验,我强烈建议在列表/元组上使用对象来表示抽象语法树。使用后者很脆弱,而前者提供了更方便的界面。
  • 一种方法是用图表示您的结构并应用基于图的算法(例如 DFS 等)-但是图论是一个巨大的话题,您的问题非常笼统(例如你想计算周期等...)

标签: python data-structures abstract-syntax-tree


【解决方案1】:

您可以保留方括号的计数。 你可以找到更详细的解释here。 这是代码的改编:

string = str(tree)

currentDepth = 0
maxDepth = 0
for c in string:
    if c == '[':
        currentDepth += 1
    elif c == ']':
        currentDepth -= 1

    maxDepth = max(maxDepth, currentDepth)

同样的警告,如果您的数据可能包含 '['']',这将中断。 在这种情况下,您需要为这些方括号定义转义方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多