使用Python 3.8
我只是在使用min(list_of_list)
,这似乎可以解决问题。
lst_of_list = [[9,10,15], [1,8,4], [-3,999,9999]]
min(lst_of_list) = [-3,999,9999]
lst_of_list = [[26, 40, 83], [49, 60, 57], [13, 89, 99]]
min(lst_of_list) = [13, 89, 99]
其他案件按我的意愿行事。
在许多堆栈溢出问题中,它们不只是使用min(lst_of_list)
,而且在documentation中说。 “返回可迭代的最小项”。因此,在lst_of_list
中,每个列表都是一个项目,因此我认为min(lst_of_list)
返回具有最小和,均值等的列表。但这也没有道理。
min(lst_of_list)
是否在列表列表中找到最小值并返回包含最小值的列表,或者我缺少某些内容,因此此方法不合适吗?
答案 0 :(得分:2)
Python内置的min
函数根据您为type
函数提供的参数min
使用“排序”规则。这就是@ kaya3在他的评论中建议的内容。
您对文档的理解不完整:
min(iterable, *[, key, default])
min(arg1, arg2, *args[, key])
以可迭代的返回最小的项目,或者返回两个或多个参数中的最小的项目。
因此,只要可以对参数进行排序,实际上就可以传递一个可迭代的 OR 多参数。
min([1,2,3]) #Outputs 1, passing an iterable
min(1,2,3) #Outputs 1, passing multiple arguments.
现在,如果您运行此min(1, [1,2,3])
,则会出现以下错误:
TypeError:“列表”和“ int”的实例之间不支持“ <”
这意味着Python无法“排序”,因此无法找到两个参数的最小值,因为例如,您的最小值定义可能与我的不同的strings
。
比较两个列表(即可迭代对象)
序列对象通常可以与具有相同序列类型的其他对象进行比较。比较使用字典顺序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较下两个项目,依此类推,直到用尽任何一个序列。
如果您运行min(<list>,...<list>)
,这正是进行比较的方式。因此,没有什么意外的。
答案 1 :(得分:0)
您可以使用递归:
代码:
def smallest(lst_var):
small = None
for i in lst_var:
if type(i) == list:
if small != None:
small = min(small, smallest(i))
elif small == None:
small= smallest(i)
else:
if small != None:
small = min(small, i)
elif small == None:
small = i
return small
print(smallest([23, [123,213,12,3], [1232,21,3,123,1], 3412, 123]))