我想运行一个用于在列表内生成测温代码的函数。当我输入大范围内容时,功能会花费很多时间-
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
正确地...
答案 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]
。