2016-11-11 178 views
0
x = [2,4,34,35,36,37] 

如果transmax = 36的O/P = 36 如果transmax = 10然後O/P = 4(因爲這是在邊界10內的最大。在python查找最大值(列表),其小於規定值

我返回下面的功能,但它得到有時超時..其他任何可用的最佳方法是什麼?

def rangemaxhouse(transmax): 
    return(max(i for i in x if i<= transmax)) 
+2

你有什麼是如何做到的。 –

+0

您沒有將'x'作爲參數傳遞給那裏。 –

+2

那麼,如果你有排序的數據,避免使用列表理解。遍歷列表直到你沒有得到你想要的結果然後中斷。 – Shasha99

回答

1

這是規範的方式來做到這一點。從理論上講它可以去不斷所謂輕微如果您使用filter並使用C語言實現的內置函數,則速度會更快:

from future_builtins import filter # Only on Py2, for generator based filter 

def rangemaxhouse(transmax): 
    return max(filter(transmax.__ge__, x)) 

碰巧在這種情況下,在3.5.2的本地測試中,它仍然運行速度較慢,沒有縮放優勢;發電機表達式嚴格加快(有一個原因mapfilter通常是不鼓勵的;他們贏得的時間是有限的,不是特別可預測的)。

相關問題