使循环范围有条件的最佳方法?

时间:2014-10-28 23:30:41

标签: python python-2.7 loops nested-loops

我试图了解限制循环范围的最有效方法是什么。这里的想法是我的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

还有其他想法或建议吗?实际的循环问题比这要大得多,所以速度是一个考虑因素,任何建议都非常受欢迎!

2 个答案:

答案 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修复了缩进。