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

为什么在python中迭代列表要比迭代迭代器慢得多?,python,performance,list,iterator,Python,Performance,List,Iterator,我想知道为什么在Python2.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 "=========

我想知道为什么在Python2.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倍以上。

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

差异消失。

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