计算嵌套列表的深度或最深级别

2024-09-28 21:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

A有一个真正的问题(和头痛)与任务。。。

我在一个入门编程类,我必须写一个函数,给定一个列表,将返回“最大”深度它去。。。 例如:[1,2,3]将返回1,[1,[2,3]]将返回2。。。

我已经写了这段代码(这是我能得到的最好的代码)

def flat(l):
    count=0
    for item in l:
        if isinstance(item,list):
            count+= flat(item)
    return count+1

然而,它显然没有像它应该的那样工作,因为如果有列表不算最大深度,它仍然会提高计数器。。。

例如:当我使用带[1,2,[3,4],5,[6],7]的函数时,它应该返回2,但它返回3。。。

任何想法或帮助将非常感谢^^非常感谢!!几个星期来我一直在纠结这件事。。。


Tags: 函数代码in列表forreturnifdef
3条回答

广度优先,无递归,也适用于其他序列类型:

from collections import Sequence
from itertools import chain, count

def depth(seq):
    for level in count():
        if not seq:
            return level
        seq = list(chain.from_iterable(s for s in seq if isinstance(s, Sequence)))

同样的想法,但占用的内存要少得多:

from collections import Sequence
from itertools import chain, count

def depth(seq):
    seq = iter(seq)
    try:
        for level in count():
            seq = chain([next(seq)], seq)
            seq = chain.from_iterable(s for s in seq if isinstance(s, Sequence))
    except StopIteration:
        return level

下面是编写函数的一种方法

depth = lambda L: isinstance(L, list) and max(map(depth, L))+1

我认为您缺少的是使用max()

让我们先稍微重新表述一下您的需求。

The depth of a list is one more than the maximum depth of its sub-lists.

现在,这可以直接转换为代码:

def depth(l):
    if isinstance(l, list):
        return 1 + max(depth(item) for item in l)
    else:
        return 0

相关问题 更多 >