You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归函数计算列表深度返回异常结果求助

排查递归计算深度函数的异常问题

让我帮你分析一下这个递归函数返回结果不符合预期的原因,以及如何修复它~

问题根源

你的get_depth函数目前的逻辑犯了两个关键错误:

  1. 只处理了可迭代对象的第一个元素:代码里只递归调用了a[0],如果对象里不同元素的嵌套深度不一样,会直接忽略其他元素的深度。
  2. 错误地累加层级数值:当前返回的是n + 递归结果,这会把每一层的层级数加起来,而不是取嵌套的最大深度。

举个例子,测试用例b = [[1,2], [2,3]]的执行路径:

get_depth(b, 0) → 0 + get_depth([1,2], 1)
get_depth([1,2], 1) →1 + get_depth(1, 2)
get_depth(1,2) → 返回2
最终总和:0+1+2=3,而实际我们需要的是最大嵌套层数2

修复方案

我们需要调整递归逻辑:遍历可迭代对象的所有元素,计算每个元素的深度,取其中的最大值,再加上当前层级的深度(+1)。

修正后的代码

def isiterable(obj):
    '''
    takes in an obj and returns 1 if iterable or 0 if not
    strings are discarded as iterable
    :param obj: any object
    :return: int
    '''
    if isinstance(obj, str):
        return 0
    else:
        try:
            iter(obj)
            return 1
        except TypeError as err:
            return 0

def get_depth(a, n=0):
    if isiterable(a):
        # 遍历所有元素,计算每个元素的深度,取最大值后加1(当前层级)
        return 1 + max(get_depth(item, n) for item in a)
    else:
        return n

测试验证

  • 对于a = [[[1,2], [3,4]], [[5,6],[7,8]]],返回3,符合预期
  • 对于b = [[1,2], [2,3]],返回2,符合预期
  • 对于c = [2],返回1,符合预期

补充优化

如果你希望初始调用时更简洁(不需要传递n参数),可以调整默认参数逻辑,让函数更符合直觉:

def get_depth(a):
    if isiterable(a):
        return 1 + max(get_depth(item) for item in a)
    else:
        return 0

这样调用get_depth([[[1,2]]])会直接返回3,使用起来更顺手。

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:08:40