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

我想处理一个非常大的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

我知道这些物品的长度是62 ** 5.如果我想处理索引范围从300000到600000的项目元素,如何实现这一目标?

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

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

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

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

解决方法:

您可以使用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
上一篇:关于一段有趣代码引出的String创建对象的解释


下一篇:python – 在Pandas中生成滚动窗口中的值组合