如果我重复使用它,我应该缓存范围结果吗?

时间:2016-10-27 22:03:30

标签: python python-3.x optimization range

我对python来说比较新,我试图为HackerRank问题优化一些代码。我发现使用range(即生成列表?)比使用while循环和单个变量进行迭代要快得多。

如果我稍后在代码中迭代相同的序列,我想知道缓存range函数的结果是否更快。例如:

这是否更快:

ten = 10
zeroToTen = range(ten)

sum = 0
for x in zeroToTen:
    sum += x

product = 1
for y in zeroToTen:
    product *= y

或者我应该每次只记得range

ten = 10

sum = 0
for x in range(10):
    sum += x

product = 1
for y in range(10):
    product *= y

2 个答案:

答案 0 :(得分:2)

它不会产生明显的差异,大部分时间都花在循环内部,而不是生成range对象。

Python 3中的

range返回一个序列,这意味着它将动态生成值,而不必将它们存储在列表中。

答案 1 :(得分:2)

在python 3中,range是一个生成器。这意味着它将产生序列的所有数字。这是简单的补充。

您可以将其缓存在listcache = list(range(10))中,但会分配一些内存并需要对其进行迭代:效率不高!

BTW:第一个例子没有缓存结果,你只需要复制生成器函数。你可以节省几微秒的解析时间(因为该函数已被解析,不值得)

所以,不,在python 3中缓存range的结果没有用(在python 2中,它会很有用,是的,因为它会创建一个实际的list)。