python - 递归查找最小值(无内置或循环)
问题描述
下面是我在嵌套列表中查找最小整数的代码。它抛出这个错误:
TypeError: '<' not supported between instances of 'int' and 'list'
我知道为什么,但不知道如何解决它。除了 len、int、str 和 append,我无法使用循环或内置函数。
def min(nest):
compareNum = nest[0]
if len(nest) == 1:
return nest[0]
if compareNum < min(nest[1:]):
return compareNum
else:
return min(nest[1:])
提前致谢!
解决方案
如果您仅限于len
、int
、str
和append
,则以下内容似乎对我有用。它甚至可以处理空列表。
def is_a_list(input):
return str(input)[0] == '['
def nested_min(input):
# if type(input) is list:
if is_a_list(input):
length = len(input)
if length == 0:
return None
if length == 1:
return nested_min(input[0])
else:
mid = length // 2
first = nested_min(input[:mid])
second = nested_min(input[mid:])
if first is None:
return second
elif second is None:
return first
return first if first < second else second
else:
return input
如果您被允许使用type()
,请使用注释行而不是使用 的未注释版本is_a_list()
,并删除该辅助函数。
我不喜欢逐个减少递归调用。相反,此解决方案在每次迭代时将列表和子列表分成两半,因此它应该能够处理非常大的输入。考虑以下测试用例:
from random import randint
rnd_list = [randint(10, 1000000) for _ in range(100000)]
# use builtin min to confirm answer
print("rnd_list minimum is " + str(min(rnd_list)))
test_list = [42, 17, [99, 100], [rnd_list], [], 10000]
print("nested minimum is " + str(nested_min(test_list)))
这会产生如下输出:
rnd_list minimum is 22
nested minimum is 17
或者
rnd_list minimum is 12
nested minimum is 12
但在与其他建议的解决方案一起使用时超过了最大递归深度。
推荐阅读
- angular - 为什么我应该使用@ngrx/store?
- php - 显示比预期更多的值(从标头中提取编码)
- javascript - React - 将对象转换为具有属性的对象数组
- javascript - Angular ui sortable:无法在嵌套项目中正确拖动
- android - WifiManager,disableNetwork() 在 Oreo 中总是返回 false
- python - 基于文本文件的依赖注入工厂
- ckeditor - 债权人的 InsertText 在文本中间不起作用
- sql - SQL 分组依据和日期间隔
- java - “词法排序”base64 的定义是什么,为什么 RFCC-1940 显然是规范参考?
- asp.net-mvc - 如何使用客户的 IP 地址向另一个网站发出请求?