更快/高效地运行大量循环

时间:2019-05-12 14:09:39

标签: python for-loop optimization

我想运行一个用于在列表内生成测温代码的函数。当我输入大范围内容时,功能会花费很多时间-

    def Thermo_Only(bit_size):
        lst=[]
        code=0
        for bit in xrange(bit_size):
            lst.append(code)
            code = code*8+7
        return(lst)

当输入为0x3ffff时,我正在使用Pyscripter接收MemoryError 我已经尝试过列表理解,但似乎无法包含-

 code = code*8+7 

正确地...

2 个答案:

答案 0 :(得分:0)

使用xrange和list理解确实降低了for循环的速度。我也将最大值减小为0x3fff,这似乎为我提供了所有需要的值。

答案 1 :(得分:0)

您不应该在Python 3中遇到代码的内存问题。我尝试了一下(将xrange()更改为range()),并在12秒内得到了响应。

您可以这样编写函数:

def Thermo_Only(n): 
    return [ (1<<i)-1 for i in range(0,3*n,3) ]

实际上,您可以完全避免生成列表。如果要将结果放置在数组中:

thermoArray = Thermo_Only(n)

您可以简单地创建一个函数,然后像在引用数组中的索引一样使用它:

def thermoArray(n): return (1<<(3*n))-1

并在代码中使用thermoArray(i)代替thermoArray[i]