【问题标题】:Why would iterating over a list be much slower than iterating over an iterator in python?为什么迭代列表比迭代 python 中的迭代器要慢得多?
【发布时间】:2014-09-14 20:55:52
【问题描述】:

我想知道为什么在 Python 2.7 中迭代列表比迭代迭代器要慢得多。下面是示例代码和输出。

import timeit
stmt = """
    for i in range(1000000):
        pass
    """
print "================for loop with list=================="
t = timeit.Timer(stmt)
print min(t.repeat(3, 100))

print "================for loop with iterator=================="
stmt = """
    for i in seq:
        pass
    """
t = timeit.Timer(stmt, setup = "seq = iter(range(1000000))")
print min(t.repeat(3, 100))

输出:

================for loop with list==================
2.61899293756
================for loop with iterator==================
0.0191696885382

似乎对迭代器进行迭代比对列表进行迭代快 10 倍以上。

【问题讨论】:

    标签: python performance list iterator


    【解决方案1】:

    您的迭代器测试在第一次运行时耗尽了迭代器。所有进一步的运行都会立即结束循环,这很快。如果不是因为设置代码在 3 个 timeit 调用 repeat 中的每一个上都重新执行,迭代器计时会更快。

    如果我们在每次运行时重新生成迭代器:

    >>> timeit.timeit('for i in seq: pass', 'seq=range(1000000)', number=100)
    2.4989398827775986
    >>> timeit.timeit('for i in iter(seq): pass', 'seq=range(1000000)', number=100)
    2.543197477789299
    

    差异消失了。

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多