在Python中生成列表的所有排列时列表中的最大元素数
The maximum number of element in a list when generate all the permutations of a list in Python
我正在使用 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])时,需要一个很多时间来生成所有的排列,程序被冻结了。所以我想知道是否有任何方法可以生成一个大列表的所有排列,谢谢!
itertools
return 一台发电机 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
我正在使用 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])时,需要一个很多时间来生成所有的排列,程序被冻结了。所以我想知道是否有任何方法可以生成一个大列表的所有排列,谢谢!
itertools
return 一台发电机 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