如何生成前 n 个排列然后暂停和重新启动?

问题描述

一个简单的问题,我有来自 how to skim itertools permutations代码

w_sparse = sla.eigs(csc_matrix(A),k=100,sigma=0+0j,which='LM',return_eigenvectors=False,maxiter=2000)
idx = np.argsort(abs(w_sparse.imag))
w_sparse = w_sparse[idx]

如何暂停、恢复、停止、重新开始迭代?

我如何查看以 100 为步长的迭代?

以 n 为步长?

解决方法

您可以获得迭代器的无限循环副本,然后使用 ncycle 中的 islice 从中获取 itertools 块。

import itertools

n_chunks = 30
chunk_size = 100
l = ["A","B","C","(",")","#"]

perm_iterator = itertools.permutations(l)
loop_perms = itertools.cycle(perm_iterator)
for n in range(n_chunks):
    print(list(itertools.islice(loop_perms,chunk_size)))