python - 在 Python 中确定嵌套元组的嵌套级别的简单方法

标签 python algorithm python-3.x recursion nested

有没有一种简单的方法来确定 t 的嵌套级别(不依赖于 Python 的递归限制)? (代表重组二叉树)?

t = (4, (3, 5, (2, 4, 6, (1, 3, 5, 7))))

请注意,在没有先验知识深度的情况下 t , 例程可能面临递归限制,这是由 sys.setrecursionlimit(n) 设置的并被 sys.getrecursionlimit() 查看.尽管如此,事先将递归限制设置得非常高可能还不够,从而产生错误

`RecursionError: maximum recursion depth exceeded while calling a Python object`. 

以下生成更大(更深)的 t :

t = tuple(tuple(range(k)) for k in range(1,200))`

我猜这些可能有效(还没有制定出细节):

  • 可以转换t串起来并计算左括号的数量
  • 如果展平元组的大小为 $N$,则深度为 $n(n+1)/2=N$ 的正二次根的大小,即 $n=(-1+\sqrt(1+ 8N))/2$
  • 反复剥离(并计数)外容器直到最深的嵌套
  • 还有其他的吗?

附言任何想法为什么在线 TeX 没有在我的问题中呈现?测试:$N$

最佳答案

您可以将递归函数转换为您自己管理的堆栈,例如

t = (4, (3, 5, (2, 4, 6, (1, 3, 5, 7))))

def depth(t):
    max_depth = 0
    A = [(t,max_depth)]
    while A:
        x,depth = A.pop()
        if isinstance(x, (list, tuple)):
            for a in x:
                A.append((a,depth+1))
        else:
            max_depth = max(max_depth,depth)
    return max_depth

print depth(1)  # Prints 0
print depth((1,1)) # Prints 1
print depth(t) # Prints 4

这不是递归函数,因此不会达到递归限制。

关于python - 在 Python 中确定嵌套元组的嵌套级别的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33788456/

相关文章:

python - 如何在Python中根据子类类型定义基类参数?

algorithm - 如何快速找到可以形成正斜率线的点对数?

algorithm - 回溯经典n皇后的时间复杂度分析

python-3.x - python 3 : Convert wave data (byte array) to numpy array of floating point values

python - Tkinter - 如何限制文本使用的空间?

python - 使用 Scipy 最小化数据线性组合的函数

python - 如何根据最高概率从列表中获取值?

python - worker_concurrency 配置对 celery 无效

algorithm - 具有重复项的选择排序行为

python - 我怎样才能释放相机<imutils.video.webcamvideostream.WebcamVideoStream instance at 0x7f2c40e75b00>