Python中列表的极端模式

Python中列表的极端模式,python,Python,我应该使用“节点的极端模式”在节点列表中找到最小值。我不允许使用min()函数。我想我需要使用某种循环或递归。以下是阵列的“极端模式”: largest = items[0] for i in range(0,len(items),1): if (items[i] > largest): largest = items[i] 但这种模式在包含节点的列表上不起作用: [1, [23, [53, [54, [5, None]]]

我应该使用“节点的极端模式”在节点列表中找到最小值。我不允许使用
min()
函数。我想我需要使用某种循环或递归。以下是阵列的“极端模式”:

    largest = items[0]
    for i in range(0,len(items),1):
        if (items[i] > largest):
            largest = items[i]
但这种模式在包含节点的列表上不起作用:

    [1, [23, [53, [54, [5, None]]]]]
如何实现类似的模式以在类似于上面的列表中查找最小值?

def myMin(mylist):
curList = items
if curList:
    largest = items[0]
    while curList is not None:
        if (curList[0] > largest):
            largest = curList[0]
        curList = curList[1]
    print largest
最小值=浮点('inf') 对于mylist中的l: 如果存在(l,列表): tmp=myMin(l) 如果tmp<最小值: 最小值=tmp elif l<最小值: 最小=l 如果最小==浮点('inf'): 一无所获 返回最小值

修正了@Blckknght的评论。

这里是@aw4lly答案的一个变体,它将在Python 3中工作

def myMin(lst):
    smallest = None
    for i in lst:
        if isinstance(i, list):
            i = myMin(i)
        if smallest is None or i is not None and i < smallest:
            smallest = i
    return smallest
car=lambda lst:lst[0]#值
cdr=lambda lst:lst[1]#下一个列表
lst=项目
如果lst:#不为空
最大=车辆(lst)
虽然lst不是无:
如果最大<车辆(lst):
最大=车辆(lst)
lst=cdr(lst)
打印(最大)

这听起来是个有趣的问题!你有什么想法?递归是一个很好的开始,你尝试了什么?谢谢你的快速回复!太棒了。我不得不稍微修改一下:它是不正确的(第3、4、5行)。请看,这在Python3中不起作用,因为没有一个对象不能与任何其他类型的对象相比。最后还缺少一个
返回最大的
!(另外,您计算的是最大值,而不是最小值,因此函数名有误导性。)修复!这就是为什么不应该一大早就编写代码的原因。也在测试。
def myMin(lst):
    smallest = None
    for i in lst:
        if isinstance(i, list):
            i = myMin(i)
        if smallest is None or i is not None and i < smallest:
            smallest = i
    return smallest
>>> print(myMin([1, 2, 3, [4, [5], [], 0, [6, 7]], [[8], 9]]))
0
>>> print(myMin([[[],[[],[],[[],[]],]],[],[[]]]))
None
car = lambda lst: lst[0]  # value
cdr = lambda lst: lst[1]  # next list

lst = items
if lst:  # not empty
   largest = car(lst)
   while lst is not None:
         if largest < car(lst):
            largest = car(lst)
         lst = cdr(lst)
   print(largest)