使用n=len(s)而不是直接使用len(s)是否更快



通常为了节省一些时间,我希望在本地函数中使用n=len(s(。我很好奇哪一个呼叫更快,还是它们相同?

while i < len(s):
# do something

while i < n:
# do something

应该没有太大的差异,但使用len(s(,我们需要先到达s,然后调用s。长度。这是O(1(+O(1。但是使用n,它是O(1(。我想是的。

更快。

  • 使用n,您在变量(字典(中查找一次
  • 使用len(s)可以查找两次(len也是我们必须查找的函数(。然后调用函数

也就是说,如果你大部分时间都使用while i < n:,你就可以摆脱经典的for i in range(len(s)):循环,因为上边界不会改变,并且在range中只在开始时评估一次(这可能会导致你:为什么我不直接迭代元素或使用enumerate(

while i < len(s)允许将您的索引与不同的列表进行比较。这就是重点。如果你固定了边界,它就会变得不那么吸引人。

for循环中,使用continue跳过增量很容易(忘记增加i并最终使用无限的while循环也很容易(

你是对的,这里有一些基准:

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)打了数百万次电话。

相关内容

  • 没有找到相关文章

最新更新