为什么在python中迭代列表要比迭代迭代器慢得多?
我想知道为什么在Python2.7中迭代列表要比迭代迭代器慢得多。下面是一个示例代码和输出为什么在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 "=========
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
差别消失了