Найти максимальное значение плоского списка или кортежа - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть элемент N, который может быть списком или кортежем. Элементом N может быть или int, кортеж или список. Задача состоит в том, чтобы сгладить это и вернуть наибольшее значение.

Мне удается сгладить N, и я могу вернуть список целых чисел, однако при применении max () я получаю ошибку: TypeError: can only объединить список (не "int") в список ... Я не уверен, где я ошибаюсь и почему, даже когда я пытаюсь преобразовать результат в список:

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]

спасибо

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Рекурсивное решение:

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

Код Demo

2 голосов
/ 11 февраля 2020

Попробуйте этот код

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...