繁体   English   中英

在Python中优化列表创建

[英]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 seconds0.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM