在循环之前计算一个列表的长度比在循环中重新计算它更快吗?

时间:2017-01-08 02:05:12

标签: python performance loops for-loop

假设我们必须在循环中的某些计算中使用列表的长度。哪个更快,在每次计算中使用len(list_)或存储长度length = len(list_)然后使用length?例如:

for x in range(n):
    print(len(list_) + 1)

对战

length = len(list_)
for x in range(n):
    print(length + 1)

假设一般情况(n可以是任何值)。

3 个答案:

答案 0 :(得分:2)

这是使用timeit进行的简单测试,如@DSM建议:

def direct_len(lst):
    total = 0
    for x in range(1000):
        total += len(lst) + 1

def precalc(lst):
    length = len(lst)
    total = 0
    for x in range(1000):
        total += length + 1

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("direct_len(list(range(100)))", setup="from __main__ import direct_len", number=10000))
    print(timeit.timeit("precalc(list(range(100)))", setup="from __main__ import precalc", number=10000))

上面我在Windows 8上使用Python 3.5得到以下结果:

1.3909554218576217
0.8262501212985289

答案 1 :(得分:0)

访问单个存储变量比访问函数并将其传递给访问变量要快得多。

>>> import timeit
>>> timeit.timeit('x', setup='x=len([1,2])')
0.024496269777304097
>>> timeit.timeit('len(x)', setup='x=[1,2]')
0.10009170159894687

然而,正如我在comment above中所说,这并不重要。如果你打电话的功能非常昂贵,那可能很重要,但这次并非如此。使用任何使代码看起来更干净的东西。

答案 2 :(得分:-1)

Python的列表将其长度存储在变量中,因此这两种方式没有太大区别。

第一个获取长度(这只是一个变量,len()函数中没有任何计算)每次在循环中,第二个只执行一次函数。我的测试时间相同。