在Python中生成列表的所有排列时,列表中元素的最大数量

时间:2015-07-02 05:30:49

标签: python permutation

我正在使用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])时,它的效果很好,需要很多生成所有排列的时间,程序被冻结。所以我想知道是否有办法为大清单生成所有排列,谢谢!

1 个答案:

答案 0 :(得分:2)

itertoolsns时间内返回一个生成器。转换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