我想处理一个非常大的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
到300000
的{{1}}元素,如何实现此目标?
我试图将600000
转换为python列表,如下所示:
itertools.product
但似乎转换耗费了大量内存,因为我已经等了很长时间才进行此转换,最后放弃了。
我有这个需求,因为我想在python gevent中做这个事情,所以我想把大items = list(product(text, repeat=5))[300000:600000+1]
for item in items:
#do something
切成小项目以便gevent生成。
答案 0 :(得分: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