2016-11-11 144 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通常是不鼓励的;他们赢得的时间是有限的,不是特别可预测的)。

相关问题