如何在 python 中分割进程 itertools.product?

How to slice process itertools.product in python?

我想处理一个非常大的 itertools.product 对象。问题是这样的:

import string
from itertools import product
text = string.lowercase[:] + string.uppercase[:] + '0123456789'
items = product(text, repeat=5)
for item in items:
    #do something

我知道 items 的长度是 62**5。如果我想处理items中索引范围从300000600000的元素,如何实现?

我尝试将 itertools.product 转换为 python 列表,如下所示:

items = list(product(text, repeat=5))[300000:600000+1]
for item in items:
    #do something

但是好像转换占用内存比较大,等了好久,最后还是放弃了。

我有这个需求是因为我想在python gevent中做这件事,所以我想把大的itertool.product切成小的东西用于gevent spawn。

您可以使用 islice 来执行此操作。

from itertools import product, islice
import string 

text = string.ascii_letters + string.digits
for item in islice(product(text,repeat=5), 300000, 600000):
    # do something