在循环之前计算一次列表的长度是否比在循环中重新计算它快?

2024-04-25 19:46:03 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们必须在循环中的某些计算中使用列表的长度。在每次计算中使用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可以是任何值)。你知道吗


Tags: in列表forlen情况rangelengthlist
3条回答

下面是一个使用@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

访问一个存储的变量要比访问一个函数并向其传递一个已访问的变量快得多。你知道吗

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

然而,正如我在comment above中所说的,这并不重要。如果您调用的函数非常昂贵,这可能很重要,但这次不是这样。使用任何能让你的代码看起来更干净的东西。你知道吗

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

第一个循环每次都得到长度(这只是一个变量,len()函数中没有任何计算),第二个循环只做一次函数。我考试的时间是一样的。你知道吗

相关问题 更多 >