我试图了解限制循环范围的最有效方法是什么。这里的想法是我的j被输入到需要事先确定的功能中。
我正在处理的问题的一个限制因素是j必须始终小于i。
max_value = None
for i in range(1,1499):
for j in range(1,1499):
if i > j:
candidate = some_function(i,j)
if candidate > max_value:
max_value = candidate
现在我的i>这里没有必要使用j语句,因为最好的解决方案总是在i> gt;学家但是,因为我知道这一点,我想利用它限制我的范围,并阻止程序计算更多的循环而不是必要的。
最好的方法是什么?我在思考一些可行的方法:
max_value = None
for i in range(1,1499):
for j in range(1,i):
candidate = some_function(i,j)
if candidate > max_value:
max_value = candidate
还有其他想法或建议吗?实际的循环问题比这要大得多,所以速度是一个考虑因素,任何建议都非常受欢迎!
答案 0 :(得分:1)
我认为在python中编写此代码的最快方法可能是:
max(some_function(i,j) for i in xrange(1, 1499) for j in xrange(1, i))
现在你不用range
创建不必要的列表,并且大多数执行都是在C代码中,因为它只是一个生成器表达式而不是显式的python循环。
当然,正如评论员提到的那样,使用timeit
检查您的搜索结果。
答案 1 :(得分:0)
使用i
中的range
可以完成很酷的事情。那就是:
for i in range(1,1499):
for j in range(1,i):
candidate = some_function(i,j)
if candidate > max_value:
max_value = candidate
另请注意,我在max_value = candidate
修复了缩进。