簡體   English   中英

從列表內的列表中獲取最小最大值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM