繁体   English   中英

为什么遍历列表比遍历python中的迭代器要慢得多?

[英]Why would iterating over a list be much slower than iterating over an iterator in python?

我想知道为什么迭代列表要比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

似乎在迭代器上进行迭代比在列表上进行迭代快十倍以上。

迭代器测试会在第一次运行时耗尽迭代器。 所有进一步的运行都会立即结束循环,这很快。 如果不是因为一个事实,即设置代码在每个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

差异消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM