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

时间:2016-06-28 09:09:19

标签: 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

我知道items的长度为62**5。如果我想处理其索引范围从items300000的{​​{1}}元素,如何实现此目标?

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

itertools.product

但似乎转换耗费了大量内存,因为我已经等了很长时间才进行此转换,最后放弃了。

我有这个需求,因为我想在python gevent中做这个事情,所以我想把大items = list(product(text, repeat=5))[300000:600000+1] for item in items: #do something 切成小项目以便gevent生成。

1 个答案:

答案 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