Itertools vs Nested Loops Performance

时间:2016-05-20 19:21:19

标签: python performance loops itertools

我必须在列表中生成所有2对项目组合。现在,我知道有两种方法可以实现这一点:嵌套的for循环和python的内置 itertools

from itertools import combinations

foo = [1, 2, 3, 4]

for i in xrange(len(foo)):
    for j in xrange(i + 1, len(foo)):
        print foo[i], foo[j]

for c in  combinations(foo, 2):
    print c

我的问题是:使用一个优于另一个有什么显着优势吗?

1 个答案:

答案 0 :(得分:1)

所以我继续使用Python的 timeit 来测量运行时,修改第一个循环为@ user2357112建议:

import timeit
from itertools import combinations

foo = [i for i in xrange(0, 1000)]    

def loop_test():
    combos = []
    for i in xrange(len(foo)):
        for j in xrange(i + 1, len(foo)):
            combos.append((foo[i], foo[j]))    

def iter_test():
    combos = []
    for c in combinations(foo, 2):
        combos.append(c)    

if __name__ == '__main__':
    print timeit.timeit('loop_test()', setup='from __main__ import loop_test', number=1000)
    print timeit.timeit('iter_test()', setup='from __main__ import iter_test', number=1000)

输出:

59.1836869717
45.6625859737

有趣的是,似乎 itertools 实际上比嵌套循环更快。