python - Itertools 与嵌套循环性能对比

标签 python performance loops python-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

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

最佳答案

所以我继续使用 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 实际上比嵌套循环更快。

关于python - Itertools 与嵌套循环性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354372/

相关文章:

c - 如何保持运行总计

python - 如何编写一个 pandas 函数,允许我将数字读入方程并将结果输出到数据帧?

python - 为什么我的大都会算法(mcmc)的Python实现这么慢?

python - 使用 settings.LANGUAGES 使用 gettext() 正确翻译名称

java - AJAX4JSF/AjaxStateHolder | AJAX4JSF/AjaxStateHolder | AJAX4JSF/AjaxStateHolder session 内存泄漏

python - 使用 numpy 加速 for 循环

python - 在Python中解压字典并获取值

c++ - 转换大约 150mb 字符串的快速方法

python - 如何删除空白以保持平衡?

SQL删除循环