如何在 python 中分割进程 itertools.product?
How to slice process itertools.product in python?
我想处理一个非常大的 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
到600000
的元素,如何实现?
我尝试将 itertools.product
转换为 python 列表,如下所示:
items = list(product(text, repeat=5))[300000:600000+1]
for item in items:
#do something
但是好像转换占用内存比较大,等了好久,最后还是放弃了。
我有这个需求是因为我想在python gevent中做这件事,所以我想把大的itertool.product
切成小的东西用于gevent spawn。
您可以使用 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
我想处理一个非常大的 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
到600000
的元素,如何实现?
我尝试将 itertools.product
转换为 python 列表,如下所示:
items = list(product(text, repeat=5))[300000:600000+1]
for item in items:
#do something
但是好像转换占用内存比较大,等了好久,最后还是放弃了。
我有这个需求是因为我想在python gevent中做这件事,所以我想把大的itertool.product
切成小的东西用于gevent spawn。
您可以使用 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