在不规则列表中查找最长列表的长度

2024-04-24 04:24:42 发布

您现在位置: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

也许递归会有帮助


Tags: 代码in目的元素示例列表forlen
3条回答

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

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]
            )

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

#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)

Python 3.3版本:

def lengths(x):
    if isinstance(x,list):
        yield len(x)
        for y in x:
            yield from lengths(y)

用法:

>>> 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

在Python2.6+中,您没有yield from语句(在Python3.3中引入),因此您必须稍微更改代码:

def lengths(x):
    if isinstance(x,list):
        yield len(x)
        for y in x:
            for z in lengths(y):
                yield z

相关问题 更多 >