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)