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

Я думаю написать программу для поиска наименьшего значения во вложенном списке, вернуть значение в том же формате списка

Ввод

ip = [[[5,4,7],[4,2,1],[1,9,5,4]],[[3,5],[6,5,2]],[2,5,3,7]]

вывод

op =[[[4], [[1]] , [[1]] ],[[3],[2]],[2]]

я написал функцию, которая может определить наименьшее значение из предоставленного списка

def smallest_num_in_list( list ):

    min = list[ 0 ]
    for a in list:
        if a < min:
            min = a
    return min 

, это работает для обычного списка, сейчас я пытаюсь написать несколько логик c для вложенного списка, в котором я потерял

я пытаюсь создать что-то вроде этого введите описание изображения здесь пожалуйста, некоторые проливают свет на меня: -)

спасибо

Ответы [ 3 ]

1 голос
/ 21 апреля 2020

Может быть, это то, что вы хотите:

def fun(in_list):
    if set([type(x) for x in in_list]) == {list}:
        return [fun(x) for x in in_list]
    else:
        return [min(in_list)]

ip = [[[5,4,7],[4,2,1],[1,9,5,4]],[[3,5],[6,5,2]],[2,5,3,7]]

print(fun(ip))
[[[4], [1], [1]], [[3], [2]], [2]]
0 голосов
/ 21 апреля 2020

Поскольку вы не знаете точно, сколько уровней до go каждый раз, рекурсия может быть естественным выбором здесь.

Отсюда нам нужны шаг и условие остановки , Я предполагаю, что они довольно очевидны в этом вопросе: шаг должен быть на go вниз на один уровень списка каждый раз, в то время как условие остановки будет, когда мы достигнем "листового" списка - тот, который не имеет больше вложенных списков.

Чтобы обнаружить такой список, мы можем использовать обработку ошибок:

def minimize(l):
    try:
        return [minimize(elem) for elem in l]
    except TypeError:
        return [min(l)]

Эта функция выполняет итерации по элементам аргумента списка и пытается добавить рекурсивный вызов к результат. Когда мы делаем рекурсивный вызов в списке leaf , этот вызов завершится ошибкой, потому что элементы не повторяются. Это приведет нас на один уровень вверх к списку leaf , и мы вернем наименьшее значение.

Это означает, что эта функция будет работать с любым количеством вложений, даже с плоским списком:

>>> minimize([[[5,4,7],[4,2,1],[1,9,5,4]],[[3,5],[6,5,2]],[2,5,3,7]])
[[[4], [1], [1]], [[3], [2]], [2]]

>>> minimize([5, 4, 3, 2, 1])
[1]
0 голосов
/ 21 апреля 2020

Я думаю, что-то вроде этого:

 def inspectList(originalList) :
     ResultList=[] 
     for listItem in originalList:
          if isinstance(listItem, list) :
               MinVal=inspectList(listItem) 
               ResultList.append(MinVal)
          else:
               return min(listItem) 
      return ResultList


 ip = [[[5,4,7],[4,2,1],[1,9,5,4]],[[3,5],[6,5,2]],[2,5,3,7]]
 result =inspectList(ip)
 print(result) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...