我在Peter Wentworth的“如何像计算机科学家一样思考:学习Python 3,第3版”中找到了这个问题。我也在下面添加了他们的解决方案。
def maximum_in_list(L):
'''Finds the maximum value from L which is a List_of_List'''
item=0
for i in L:
if type(i)==list:
item=maximum_in_list(i)
elif i>item:
item=i
return item
print(maximum_in_list([9,18,99,7,4,21,[3,5,[27,57,92],7,76],32,4]))
print(maximum_in_list([2, 9, [1, 13], 8, 6]))
print(maximum_in_list([2, [[100, 7], 90], [1, 13], 8, 6])) #Here the problem occurs
print(maximum_in_list([[[13, 7], 90], 2, [1, 100], 8, 6]))
def r_max(nxs):
largest=None
first_time=True
for e in nxs:
if type(e)=type([]):
val=r_max(e)
else:
val=e
if first_time or val>largest:
largest=val
first_time=False
return largest
尽管可以产生正确的结果,但我无法理解标志的要求。
这是您的功能的巧妙解决方案:
def maximum_in_list(L):
'''Finds the maximum value from L which is a List_of_List'''
item = -float('inf')
for i in L:
if isinstance(i, list):
i = maximum_in_list(i) # see remark
item = max(item, i)
return item
备注:
wheni
是a时,list
您可以list
(递归地)将其重新分配到该最大值,这样您就不必在后面使用太多if
语句。
print(maximum_in_list([9,18,99,7,4,21,[3,5,[27,57,92],7,76],32,4])) # -> 99
print(maximum_in_list([2, 9, [1, 13], 8, 6])) # -> 13
print(maximum_in_list([2, [[100, 7], 90], [1, 13], 8, 6])) # -> 100
print(maximum_in_list([[[13, 7], 90], 2, [1, 100], 8, 6])) # -> 100
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句