Tek*_*lia 3 python performance loops python-itertools
我必须生成列表中所有两对项目组合。现在,我知道有两种方法可以实现此目的:嵌套 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
Run Code Online (Sandbox Code Playgroud)
我的问题是:使用其中一种比另一种有什么显着的优势吗?
所以我继续使用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)
Run Code Online (Sandbox Code Playgroud)
有输出:
59.1836869717
45.6625859737
Run Code Online (Sandbox Code Playgroud)
有趣的是,看起来itertools实际上比嵌套循环更快。
| 归档时间: |
|
| 查看次数: |
4418 次 |
| 最近记录: |