[英]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.