【发布时间】:2020-08-24 08:46:51
【问题描述】:
我正在尝试获取多个数组的笛卡尔积,但数组非常大,我正在尝试优化内存使用。我尝试使用下面的代码来实现一个生成器,但它只是返回某个位置有一个生成器。
import itertools
x = [[1,2],[3,4]]
def iter_tools(*array):
yield list(itertools.product(*array))
print(iter_tools(*x))
当我尝试相同的代码但使用 return 而不是 yield 时,它工作正常。如何通过实现生成器获得笛卡尔积?
【问题讨论】:
-
您的生成器立即实现了整个产品,破坏了整个目的。在任何的情况下,
itertools.product(*array)已经是一个高效的迭代器。无需将其包装在生成器中。所以只需使用itertools.product(*array)。您的生成器确实有效,生成器函数返回生成器。看来您有一个根本性的误解。 -
@juanpa 谢谢!我发布了an answer 部分基于您的评论。
标签: python iteration generator cartesian-product