列表的嵌套级别

时间:2017-03-10 20:56:24

标签: python recursion

{{1}}

嵌套列表是如此令人困惑的追踪,我以为我有它但我错了。这返回3并且应该返回4给出的示例。我是在正确的轨道上吗?有没有更好/更简单的方法来做到这一点?是否有一个小的修复程序可以使我的功能工作?

3 个答案:

答案 0 :(得分:2)

你可以想到这样的问题:

  1. 非列表内容的嵌套级别定义为0。
  2. 空列表的嵌套级别定义为1.
  3. 列表的嵌套级别(带元素)是1 +其中所有元素的最大嵌套级别。
  4. 因此,您需要处理三种情况,第三种情况涉及查找列表中每个元素的嵌套级别的最大结果。

    如果你说服自己这是一套有效的规则(通过手工测试一些输入),你应该可以很简单地将它转换成Python函数。

答案 1 :(得分:0)

这是一个Python版本,密切关注已经给出的评论和答案:

<link rel="stylesheet" href="https://npmcdn.com/react-bootstrap-table/dist/react-bootstrap-table-all.min.css">

答案 2 :(得分:0)

你需要递归每个列表中所有的项目,并选择你找到的最大嵌套:

def nest_level(lst):
    if not isinstance(lst, list):
        return 0
    if not lst:
        return 1
    return max(nest_level(item) for item in lst) + 1

如果你不能在递归步骤中使用内置max函数,你可以自己找到最大值:

max_level = nest_level(lst[0])
for item in lst[1:]:
    level = nest_level(item)
    if level > max_level:
        max_level = level
return best + 1

如果你想坚持一个没有显式循环的纯粹递归实现,你也可以这样做:

def nest_level(lst):
    if not isinstance(lst, list):
        return 0
    if not lst:
        return 1
    return max(nest_level(lst[0]) + 1, nest_level(lst[1:]))

该版本也可以在没有max的情况下完成:

def nest_level(lst):
    if not isinstance(lst, list):
        return 0
    if not lst:
        return 1
    first_level = nest_level(lst[0]) + 1
    rest_level = nest_level(lst[1:])
    return first_level if first_level >= rest_level else rest_level