首页 > 解决方案 > Python中嵌套不规则列表(不同的子列表长度和对象类型)的整数最大值

问题描述

考虑一下列表:

    assigned = [['A',[4, 5, 6]],['B',[7, 8, 9]],['D',[2,3]],['C',[14]]]

我希望重试子列表中整数的最大值。在本例中,它将是 14。

我的第一步是整理清单:

    def flattenToMax(x):

        if isinstance(x,list):
            return [a for i in x for a in flattenToMax(i)]
        else:
            return [x]

结果是:

    ['A', 4, 5, 6, 'B', 7, 8, 9, 'D', 2, 3, 'C', 14]

然后我做了:

    maxNum = (max([x for x in toMax if isinstance(x,int)]))

输出是我的预期结果 14。我问,我怎样才能将这两个步骤组合成一个函数?

标签: pythonpython-3.x

解决方案


有多种方法可以做到这一点。从我得到你的问题是你不能将此部分添加到你的函数中,因为它是一个递归函数:

maxNum = (max([x for x in toMax if isinstance(x,int)]))

这是一个关于如何在递归函数中拟合最大值部分的示例(提示:不使用实际max()函数,但也通过递归计算最大值)

assigned = [['A',[4, 5, 6]],['B',[7, 8, 9]],['D',[2,3]],['C',[14]]]

def recursive_max(a, best=None):
    if isinstance(a, list):
        for i in a:
            best = recursive_max(i, best)
        return best
    else:
        return best if not isinstance(a, int) else (a if best is None or a > best else best)

print(recursive_max(assigned))

14


推荐阅读