【发布时间】:2016-03-29 10:02:28
【问题描述】:
我正在使用创建列表
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 秒。
【问题讨论】:
-
如果您使用的是 Python 2,请使用
xrange,它使用惰性求值。 -
@idjaw:考虑到
2**x的巨大程度,NumPy 帮不上忙。 -
您要生成 2^4000000?仅运行
2**(4 * 10**6)就足以让我的 Python 提示符冻结 30 秒,你确定这是你需要做的吗? -
@idjaw 我只是尝试使用 xrange,并没有进行太多优化。我认为这与大数字有关。
-
2**k 从 0 到 n 的总和等于 2**(n+1)-1。
标签: python list python-2.7 optimization