Python 是否直接从itertools函数打印?

Python 是否直接从itertools函数打印?,python,optimization,memory-management,permutation,itertools,Python,Optimization,Memory Management,Permutation,Itertools,我想打印列表[0,1,2,3,4,5,6,7,8,9]的第一百万个排列。我用下面的代码管理这个 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

我想打印列表[0,1,2,3,4,5,6,7,8,9]的第一百万个排列。我用下面的代码管理这个

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.permutation生成器上使用itertools.islice,而不是将整个序列存储在内存中:

next(itertools.islice(itertools.permutations(perm), (10**6)-1, None))
这将返回:

('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'l', 'b', 'n', 'z', 'm', 'k', 'c', 'x', 'v', 'j')
您可以在itertools.permutation生成器上使用itertools.islice,而不是将整个序列存储在内存中:

next(itertools.islice(itertools.permutations(perm), (10**6)-1, None))
这将返回:

('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'l', 'b', 'n', 'z', 'm', 'k', 'c', 'x', 'v', 'j')

我会尝试一下,然后给你回复我会尝试一下,然后给你回复一个显而易见的解决方案,迭代排列,而不首先将它们存储在内存中,只打印第一百万个排列是的,应该可以。那么,问题出在哪里呢?我不知道怎么做,但我找到了一个显而易见的解决方案,迭代排列,而不首先将它们存储在内存中,只打印第一百万个排列是的,应该可以。那有什么问题吗?我不知道怎么做,但我知道了