我正在使用itertools生成Python列表的所有排列
import itertools
lt = [0,1,2,3]
print list(set(itertools.permutations(lt)))
当列表长度小于7(当列表长度大于7([0,1,2,3,4,5,6,7])时,它的效果很好,需要很多生成所有排列的时间,程序被冻结。所以我想知道是否有办法为大清单生成所有排列,谢谢!
答案 0 :(得分:2)
itertools
在ns
时间内返回一个生成器。转换set()
的速度很慢。
8!
>>> lt = [i for i in xrange(8)]
>>> %timeit itertools.permutations(lt)
1000000 loops, best of 3: 547 ns per loop
>>> %timeit set(itertools.permutations(lt))
100 loops, best of 3: 13.4 ms per loop
>>> %timeit list(set(itertools.permutations(lt)))
10 loops, best of 3: 19.1 ms per loop
>>> %timeit list(itertools.permutations(lt))
100 loops, best of 3: 4.9 ms per loop
<强> 9! = 362880
>>> lt = [i for i in xrange(9)]
>>> %timeit itertools.permutations(lt)
1000000 loops, best of 3: 557 ns per loop
>>> %timeit set(itertools.permutations(lt))
1 loops, best of 3: 167 ms per loop
>>> %timeit list(set(itertools.permutations(lt)))
1 loops, best of 3: 186 ms per loop
>>> %timeit list(itertools.permutations(lt))
10 loops, best of 3: 61.9 ms per loop
与for
循环相比,生成一个长度为(362880)的列表
>>> %timeit list(i for i in xrange(362880))
10 loops, best of 3: 33 ms per loop
我认为表现相当不错。 顺便说一句,我使用的是python2.7