【问题标题】:Faster for loop in Python 3Python 3 中更快的 for 循环
【发布时间】:2016-05-17 07:14:27
【问题描述】:

哪个更快,为什么?有明显区别吗?

""" my_list=[1,2,3...N] """

for i in my_list:
    do something

for i in range(1,N):
    do something

在我看来,在第二种情况下,range 函数将被调用 N 次,这可能会更慢,但我不知道 in 运算符的真正工作原理。

【问题讨论】:

  • range 函数没有被调用 N 次。如果您使用的是 Python 3.x,则第二种方法更快,内存效率更高,因为 range 不会提前构造整个列表。对于 Python 2.x,您可以使用 xrange 获得相同的效果。
  • 哦,我的意思是在 python 3 中哪个更快:第一种方法还是第二种方法?
  • @Jérôme 在 Python 3 中,第二种方法更快。为了使其在 Python 2 中更快并使用更少的内存,您可以将 range 替换为 xrange。

标签: python performance python-3.x for-loop


【解决方案1】:
>>> t = timeit.Timer("""for i in range(3):
...     pass""")
>>> t.timeit(1)
2.199320988438558e-06

相对于:

>>> t = timeit.Timer("""list_a=[0,1,2]
... for i in list_a:
...     pass""")
>>> t.timeit(1)
4.398641522129765e-06

您可以看到这些操作之间的时间差异。 此外,您应该知道,在 python 2 中,如果您不需要同时需要所有这些值(如简单迭代),则使用 xrange 而不是 range 更为可取,因为它会在每次迭代时生成一个值,这可以节省大量内存,有时甚至是 CPU(在更复杂的情况下)。

更多信息: https://wiki.python.org/moin/Generators

【讨论】:

  • print 不是性能测试的好选择,因为 I/O 操作繁重,可能会伪造统计数据
  • 谢谢。对于良好的统计测试,您会建议哪些操作?
  • 你可以使用pass :)
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 2012-09-21
  • 2019-12-25
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
相关资源
最近更新 更多