我想打印列表[0,1,2,3,4,5,6,7,8,9]
的第100万个排列。我通过下面的代码对此进行了管理。
import itertools
perm=[]
for i in range(10):
perm.append(i)
arr=[]
arr=list(itertools.permutations(perm))#stores the permutations in a list
print(arr[(10**6)-1])#prints the 1 millionth permutation
之所以有用,是因为排列的数量只有10!〜3.6 * 10 ^ 6,所有排列都可以容纳在内存中。但是我希望存储所有字母26!〜4.03 * 10 ^ 26的排列,所有这些排列显然不能容纳在内存中。
import itertools
perm=[]
alphabet="qwertyuiopasdfghjklzxcvbnm"
for i in alphabet:#stores the letters as separate entries in the list
perm.append(i)
arr=[]
arr=list(itertools.permutations(perm))
print(arr[(10**6)-1])#prints the 1 millionth permutation
上面的程序崩溃了,我不建议运行它。一个明显的解决方案是遍历排列,而无需先将其存储在内存中,而仅打印百万分之一的排列。
您可以在itertools.islice
生成器上使用itertools.permutations(perm)
,而不是将整个序列存储在内存中:
next(itertools.islice(itertools.permutations(perm), (10**6)-1))
此返回:
('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm')