小编Kev*_*Liu的帖子

中止列表理解

我在python2.7.12中有一个函数,它从函数f(x)生成一个列表,并取最大值,如下所示:

max( [f(x) for x in range(n)] )
Run Code Online (Sandbox Code Playgroud)

现在我希望在其任何元素大于B的情况下中止列表的生成,并返回该元素.结果与执行相同:

v = -float("inf")
for x in range(n):
    v = max( v, f(x) )
    if v > B: return v
return v
Run Code Online (Sandbox Code Playgroud)

问题是for循环,虽然生成的元素较少,但运行速度比我目前正在处理的问题的列表理解慢.有没有办法使用列表推导或simillar生成器方法,但是检查B并中止迭代?这里的目标是仅计算NCESSARY元素,但它比第一个例子(它计算每个元素)运行得更快.

编辑:我已经尝试了许多你提出的技巧,并为简单实现while循环而安顿下来.我最终的最终代码如下:

v = float("-inf")
x = 0
while x < n:
    v = max( v, f(x) )
    if v > B: return v
Run Code Online (Sandbox Code Playgroud)

它运行速度比for-loop快一些,尽管可能有更快的解决方案(仍然没有给所有提议的解决方案留出时间,对不起),但我喜欢简单.

谢谢.

python optimization list-comprehension generator python-2.7

5
推荐指数
1
解决办法
162
查看次数