Kev*_*Liu 5 python optimization list-comprehension generator python-2.7
我在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快一些,尽管可能有更快的解决方案(仍然没有给所有提议的解决方案留出时间,对不起),但我喜欢简单.
谢谢.
Cal*_*ras -2
尝试这样:
>>> [x**2 for x in range(10)]
Run Code Online (Sandbox Code Playgroud)
[0、1、4、9、16、25、36、49、64、81]
[x**2 for x in range(10) if x < 7]
Run Code Online (Sandbox Code Playgroud)
[0、1、4、9、16、25、36]
编辑:用 [f(x) for x in range(10) if f(x) < 7] 检查 - 并且它调用函数 f(x) 两次,所以它甚至更慢