[英]Optimising list creation in Python
我正在使用创建清单
sum_range=list(2**x for x in range(start_range,end_range+1))
此处的start_range和end_range取0到约400万之间的较大值。
这行代码似乎是瓶颈。 最终,我想要列表sum_range中所有数字的总和。 可能有更好的方法可以做到这一点?
在以下时间花费时间:-
start_range = 188640 end_range = 197280
该代码大约需要6秒钟才能在我的系统上运行。
2**n
以上的和是代数已知的。 对于n = 0到m,它是: 2**(m+1)-1
。 因此,如果您想从a到b(包括b)知道它,则取2**(b+1) - 2**(a+1) + 2**a
。 查找一般情况的几何级数。
尝试使用"<<"
运算符而不是"**"
,它也将大大节省计算时间,从4.0~5.0 seconds
到0.07~0.33 seconds
。
import datetime
t_start_1 = datetime.datetime.utcnow()
sum_range_1 = list(1<<x for x in range(188640,197280))
t_end_1 = datetime.datetime.utcnow()
print "using '<<' cost: " + str(t_end_1 - t_start_1) + "seconds"
t_start_2 = datetime.datetime.utcnow()
sum_range_2 = list(2**x for x in range(188640,197280))
t_end_2 = datetime.datetime.utcnow()
print "using '**' cost: " + str(t_end_2 - t_start_2) + "seconds"
输出:
using '<<' cost: 0:00:00.327000 seconds
using '**' cost: 0:00:04.990000 seconds
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.