Python中最快计算高达10亿的方法

时间:2013-03-06 03:07:16

标签: python range python-3.3

没有很多python /编程经验。 我需要测试1到10亿之间的每个数字,然后将某些数字附加到列表中。目前我正在尝试使用range(0,Billion),但我发现使用Python 3.3在我的机器上大约需要大约80秒。有没有更有效的方法来做到这一点?

for i in range(0, Billion)
    # if i passes test
    i.append(samplelist)

3 个答案:

答案 0 :(得分:3)

没有。 考虑一下机器时间方面的代码。您的测试和附加功能无法触及,因此我们剩下的就是我的范围。这是你的基本循环,就像你可以得到的那样。您可以编写一个while循环并编写另一行来自行增加,但我怀疑这会增加您的执行时间,因为您要对python解释器进行更多调用,然后必须对其进行处理。

第二个想法,如果你能优化你的测试程序......

答案 1 :(得分:2)

通常,如果你需要迭代到1000000000,那么还有更好的方法。例如,您可以使用某些数学属性来避免测试每个数字:

samplelist = [x**2 for x in range(int(1000000000**0.5))] # get all perfect squares up to 1000000000

Python对于数值运算来说并不是那么快。因此,迭代到1000000000并在每次迭代中做一些事情会变得很慢;除了尝试更快的解释器(例如PyPy),或者用更高性能的语言(如C语言)编写代码之外,没有办法解决这个问题。


或者,如果要向列表中添加大量元素,请考虑使用生成器。这将避免创建大量列表的开销,同时仍然可用于许多事情:

def gen_numbers(n):
    for i in range(n):
        if <i passes test>:
            yield i

for i in gen_numbers(1000000000):
    print(i)

答案 2 :(得分:0)

这应该快一点,但大部分时间可能花在调用some_test()

samplelist = [i for i in range(1000000000) if some_test(i)]