如何在python中切片进程itertools.product?

els*_*nwx 4 python python-itertools

我想处理一个非常大的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
Run Code Online (Sandbox Code Playgroud)

我知道它items的长度是62**5.如果我要处理的元素items,其索引范围从300000600000,如何实现这一目标?

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

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

但似乎转换消耗了大量的内存,因为我已经等了很长时间才进行这种转换,最后放弃了.

我有这个需求,因为我想在python gevent中做这件事,所以我想把itertool.productgevent生成的大到小切片.

sty*_*ane 7

你可以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
Run Code Online (Sandbox Code Playgroud)