我可以快速获取Python列表中最内部子列表的最小长度吗?



这显示了如何获得第一级内部列表的最小长度。

我如何返回此列表的4 b=[[1,0,1,2,1,1,1,3111111,[1,1,6,7]],[31,1,4,51,1,1,1],[1,1,6,7,8]]因为[1,1,6,7]只有4个元素。

我可以运行一个循环以获取它。但是可以简单吗?

我的意思是"最短列表的长度与最深列表相同"。

v1,任何深度的最小长度:

>>> b = [[1,0,1,2,1,1,1,3111111,[1,1,6,7]],[31,1,4,51,1,1,1],[1,1,6,7,8]]
>>> def lists_in(L):
...     for element in L:
...         if isinstance(element, list):
...             yield element
...             yield from lists_in(element)
...             
>>> min(lists_in(b), key=len)
[1, 1, 6, 7]
>>> len(min(lists_in(b), key=len))
4

v2,带有新的要求"与最深列表相同的最短列表的长度":

>>> def depths_and_lengths(L, depth=0):
...     for element in L:
...         if isinstance(element, list):
...             yield (depth, len(element))
...             yield from depths_and_lengths(element, depth-1)
...             
...             
>>> min(depths_and_lengths(b))[1]
4
>>> min(depths_and_lengths([[[1, 2]]]))[1]    # Stefan Pochmann example
2

这是一个不好的答案:

def mpr(x, inital=[]):
    if isinstance(x, list):
        inital.append(len(x))
        map(lambda x: mpr(x, inital), x)
    return inital

mpr(b)-> [3,9,4,7,5]

相关内容

  • 没有找到相关文章

最新更新