我试图“有效地”计算两个迭代器的乘积。每种方法都需要一点时间才能产生结果,而且产生的结果很多。因为似乎itertools.product
首先计算所有的项,所以要得到第一对需要花费相当多的时间。你知道吗
MCVE是:
import time
from itertools import product
def costlygen(n):
for i in range(n):
time.sleep(1)
yield i
g1 = costlygen(5)
g2 = costlygen(5)
now = time.time()
g = product(g1,g2)
for x in g:
print(x)
print(time.time()-now)
输出为:
(0, 0)
10.027392148971558
(0, 1)
10.027477979660034
(0, 2)
10.027528285980225
...
(4, 3)
10.028220176696777
(4, 4)
10.028250217437744
从结果可以清楚地看出,product
计算每个生成器生成的所有项,因此第一个结果仅在10秒后生成,而它可能仅在2秒后生成。你知道吗
有什么办法能在结果出来后马上得到结果吗?你知道吗
有一种可能的解决方案通过
gone
列表使用缓存:时间安排:
相关问题 更多 >
编程相关推荐