Python 从列表中的列表中获取最小最大值

Python 从列表中的列表中获取最小最大值,python,python-3.x,Python,Python 3.x,我是Python新手。我试图在列表中获取列表的最小值和最大值(作为列表输出)。但它并没有像预期的那样发挥作用。这是我到目前为止所拥有的 import functools # Input raw_data = [ [2, 2, 3, 4, 5, 6, 7], [0, 2, 3, 4, 5, 6, 17], [3, 4, 3, 4, 5, 6, 37] ] min_max_rows = list(map(lambda x: (min(x), max(x)), raw_da

我是Python新手。我试图在列表中获取列表的最小值和最大值(作为列表输出)。但它并没有像预期的那样发挥作用。这是我到目前为止所拥有的

import functools

# Input
raw_data = [
    [2, 2, 3, 4, 5, 6, 7],
    [0, 2, 3, 4, 5, 6, 17],
    [3, 4, 3, 4, 5, 6, 37]
]

min_max_rows = list(map(lambda x: (min(x), max(x)), raw_data))
result = functools.reduce(lambda x, y: (min(x), max(y)), min_max_rows)

print(result) # Prints (2,37) instead of (0,37)

您可以先展平列表:

flat = [item for sublist in raw_data for item in sublist]
max_item = max(flat)
min_item = min(flat)
用这个

min_val = min(min(raw_data))
max_val = max(max(raw_data))
min_max_list = [min_val,max_val]
编辑:

这其中有一个问题我显然忽略了。
min_val
包含以最小值开头的行的最小值。同样,对于
max_val
,我提出了一个不同的解决方案

temp1 = []
temp2 = []
for x in raw_data:
    temp1.append(min(x))
    temp2.append(max(x))
min_max_list = [min(temp1),max(temp2)]

NumPy方法-在更大的列表上应该更快:

import numpy as np

In [74]: a = np.asarray(raw_data)

In [75]: a
Out[75]:
array([[ 2,  2,  3,  4,  5,  6,  7],
       [ 0,  2,  3,  4,  5,  6, 17],
       [ 3,  4,  3,  4,  5,  6, 37]])

In [76]: min_max_list = [a.min(), a.max()]

In [77]: min_max_list
Out[77]: [0, 37]

这可能更接近您想要的:

result = functools.reduce(lambda a, b: (min(*a, *b), max(*a, *b)), min_max_rows)

让max和min函数对列表中的两个元组参数进行显式计算。解包元组时需要*号。

提示:
min\u max\u行
的元素是元组,而不是数字。取元组列表的最小值或最大值意味着什么?您做得很好,print(list(result))或list(functools.reduce(lambda x,y:(min(x),max(y)),min_max_rows)适用于OP的样本,但不适用于
原始数据=[[2,0,9],[4,3,4],[1,2,3]