从列表列表中获取包含最小值的列表

时间:2020-09-15 23:03:00

标签: python python-3.x

使用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)是否在列表列表中找到最小值并返回包含最小值的列表,或者我缺少某些内容,因此此方法不合适吗?

2 个答案:

答案 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

比较两个列表(即可迭代对象)

来自documentation

序列对象通常可以与具有相同序列类型的其他对象进行比较。比较使用字典顺序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较下两个项目,依此类推,直到用尽任何一个序列。

如果您运行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]))