有没有一种简单的方法来确定 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/