通常可以节省一些时间,我希望我们在本地函数中使用n = len。 我很好奇哪个通话速度更快还是相同?
while i < len(s):
# do something
vs
while i < n:
# do something
应该没有太大的区别,但是使用len,我们需要先达到s,然后再调用s。 length 。这是O(1)+ O(1)。但是使用n则为O(1)。我想是这样。
答案 0 :(得分:7)
它有更快。
n
一次查找变量(字典)。len(s)
您要查找两次(len
也是我们必须寻找的功能)。然后调用该函数。也就是说,如果您大多数时间都进行while i < n:
,则可以避免使用经典的for i in range(len(s)):
循环,因为上限没有变化,并且仅在{{1} }(这可能会导致您:我为什么不直接迭代元素或使用range
?)
enumerate
允许将索引与不同列表进行比较。这就是重点。如果您确定界限,它的吸引力就会降低。
在while i < len(s)
循环中,很容易跳过for
的增量(就像忘记了增加continue
并以无限i
循环结束一样容易)
答案 1 :(得分:5)
您是对的,这里有一些基准:
s = np.random.rand(100)
n = 100
以上已设置。
%%timeit
50 < len(s)
86.3 ns ± 2.4 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
对:
%%timeit
50 < n
36.8 ns ± 1.15 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
但是话又说回来,很难想象〜60ns的差异会影响速度。除非您要致电len(s)
数百万次。