Python 嵌套列表中的最小值

Python 嵌套列表中的最小值,python,list,Python,List,我想写一个程序,在嵌套列表中找到最小值,以相同的列表格式返回值 输入 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: i

我想写一个程序,在嵌套列表中找到最小值,以相同的列表格式返回值

输入

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 
def列表中的最小值(列表):
最小值=列表[0]
对于列表中的项目:
如果a
这适用于普通列表 现在我正试图为我丢失的嵌套列表编写一些逻辑

我正试图创造这样的东西 请给我一些启示:-)


谢谢你

我想是这样的:

 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) 

因为您不知道每次要达到多少级别,递归可能是一种自然选择

从这里我们需要阶跃和停止条件。我想在这一点上它们是非常明显的:步骤是每次向下一个列表级别,而停止条件是当我们到达一个“叶子”列表时——一个没有更多嵌套列表的列表

为了检测此类列表,我们可以使用错误处理:

def最小化(l):
尝试:
返回[l中元素的最小化(元素)]
除类型错误外:
返回[min(l)]
此函数迭代其list参数的元素,并尝试向结果添加递归调用。当我们对叶列表进行递归调用时,该调用将失败,因为元素不可iterable。这将使我们上升一级到叶列表,并且返回最小值

这意味着此函数可用于任意数量的嵌套,甚至是平面列表:

>>最小化([[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]]
>>>最小化([5,4,3,2,1])
[1]

也许这就是你想要的:

def fun(在列表中):
如果设置([在列表中为x键入(x)]=={list}:
return[列表中x的乐趣(x)]
其他:
返回[最小值(在列表中)]
ip=[[5,4,7],[4,2,1],[1,9,5,4],[3,5],[6,5,2],[2,5,3,7]]
印刷(趣味(ip))
[[[4], [1], [1]], [[3], [2]], [2]]

如果您的新问题更深一层,可能另一个
for
循环将对您有所帮助。如果我理解正确,您希望在嵌套列表(嵌套)中创建另一个函数
def minimminate_num_:
在每个嵌套列表中获得最小的数字。如果这是正确的,那么可以通过递归来实现。换句话说,函数可以自己调用。这很好,但将条件替换为:
all(对于In_list中的x,isinstance(x,list)
可能会稍微有效一些。(由于短路)。