【问题标题】:Find Maximun value of a flatten list or tuple查找展平列表或元组的最大值
【发布时间】:2020-02-11 21:07:48
【问题描述】:

我有一个元素 N,它可以是列表或元组。 N 的元素可以是整数、元组或列表。任务是将其展平并返回最大值。

我设法使 N 变平并且能够返回一个整数列表,但是当我应用 max() 时出现错误:TypeError: can only concatenate list (not "int") to list... 我是不知道我在哪里弄错了,为什么,即使我尝试将结果转换为列表:

def maxVal(n):
    mode = (list,tuple)
    result = sum(([x] if not isinstance(x, mode) else maxVal(x)for x in n), [])
    output = []
    for i in result:
        output.append(i)
    return max(output)

如果我使用返回输出(没有 max() 函数) 我得到:[5、1、2、1、9]

谢谢

【问题讨论】:

标签: python list max


【解决方案1】:

递归解决方案:

>>> def maxVal(elem):
...     if isinstance(elem, (list, tuple)):
...         if len(elem) == 1:
...             return maxVal(elem[0])
...         return max(maxVal(elem[0]), maxVal(elem[1:]))
...     else:
...         return elem
...
>>> maxVal(7)
7
>>> maxVal([9])
9
>>> maxVal([[[11]]])
11
>>> maxVal([[[[11]]], (12, 3), (4,19,(31,2),12), [12, 14, 5]])
31

Code Demo

【讨论】:

    【解决方案2】:

    试试这个代码

    def max_val(x):
        queue = list(x)
        max_ = float('-inf')
        while queue:
            elem = queue.pop()
            if isinstance(elem, (list, tuple)):
                queue.extend(elem)
                continue
            if elem > max_:
                max_ = elem
    
        return max_
    
    x = [(1,2,3, [8, 9]), 3, [4,5,6]]
    
    print(max_val(x)) # prints 9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      相关资源
      最近更新 更多