[英]Get min max from the list inside a list
我是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函數顯式評估兩個參數,它們是列表中的元組。 *是打開元組包裝所必需的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.