簡體   English   中英

Itertools與嵌套循環性能

[英]Itertools vs Nested Loops Performance

我必須生成列表中所有項目的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實際上比嵌套循環快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM