我想运行一个在列表中生成测温代码的函数。当我输入大范围的函数时,需要花费很多时间-
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
适当地..。
发布于 2019-05-13 01:13:04
使用xrange和列表理解确实降低了for循环的速度。我还将最大值减少到0x3fff,这似乎给了我所有需要的值。
发布于 2019-06-04 04:26:43
在Python3中,你的代码应该不会遇到内存问题。我尝试了一下(将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]
。
https://stackoverflow.com/questions/56100052
复制相似问题