假设我们必须在循环中的某些计算中使用列表的长度。哪个更快,在每次计算中使用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
可以是任何值)。
答案 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()函数中没有任何计算)每次在循环中,第二个只执行一次函数。我的测试时间相同。