使用itertools.product优化固定对象上的嵌套循环

时间:2016-06-16 02:45:34

标签: python nested-loops itertools

我有一个固定的对象,如下:

TAG_SET = [...]

我在循环中迭代它两次

for x in very_outer_object:
    # ...
    for t1, t2 in itertools.product(TAG_SET, repeat=2)

是否可以创建一个可重复使用的产品? itertools.product的结果不是一成不变的。它是某种类型的生成器(即它在实现中使用yield。)

这个循环是我程序中的性能瓶颈所以我正在寻求优化它。

1 个答案:

答案 0 :(得分:0)

在生成器对象上调用list会强制它评估其所有项目:

products = list(itertools.product(TAG_SET, repeat=2))

for x in very_outer_object:
    # ...
    for t1, t2 in products:
    # ...

products现在可以在你的内循环中重复使用。

如果len(TAG_SET)不是非常大,则不应出现任何内存问题。