在Python中查找列表中最长的列表

Lii*_*ald 17 python list

我必须在Python中找到最长的列表列表.

例如:

longest([1,2,3]) 返回3

longest([[[1,2,3]]]) 也返回3(内部列表为3)

longest([[], [3,[4,5],[2,3,4,5,3,3], [7], 5, [1,2,3], [3,4]], [1,2,3,4,5]])返回7(列表[3,[4,5],[2,3,4,5,3,3], [7], 5, [1,2,3], [3,4]]包含7个元素)

现在我有这个代码,但它没有做前两个例子的技巧..

def longest(list1):
    longest_list = max(len(elem) for elem in list1)
    return longest_list
Run Code Online (Sandbox Code Playgroud)

也许递归会有所帮助?谢谢!

小智 15

这些简单的几行对我有用,我的列表是嵌套的(列表列表)

#define the function#
def find_max_list(list):
    list_len = [len(i) for i in list]
    print(max(list_len))

#print output#
find_max_list(your_list)
Run Code Online (Sandbox Code Playgroud)


cr1*_*ade 7

这是任何深度列表的递归解决方案:

def longest(l):
    if not isinstance(l, list):
        return 0
    return max(
            [len(l)] 
            + [len(subl) for subl in l if isinstance(subl, list)] 
            + [longest(subl) for subl in l]
            )
Run Code Online (Sandbox Code Playgroud)


ffe*_*rri 5

Python 3.3版本:

def lengths(x):
    if isinstance(x,list):
        yield len(x)
        for y in x:
            yield from lengths(y)
Run Code Online (Sandbox Code Playgroud)

用法:

>>> l = [[], [3,[4,5],[2,3,4,5,3,3], [7], 5, [1,2,3], [3,4]], [1,2,3,4,5]]
>>> max(lengths(l))
7
Run Code Online (Sandbox Code Playgroud)

在python 2.6+中,您没有该yield from语句(在python 3.3中引入),因此您必须稍微更改代码:

def lengths(x):
    if isinstance(x,list):
        yield len(x)
        for y in x:
            for z in lengths(y):
                yield z
Run Code Online (Sandbox Code Playgroud)