Python 从列表中的列表中获取最小最大值
我是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
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]
。