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