从for循环开始的下一级抽象?

时间:2015-04-05 19:45:36

标签: python algorithm loops nested-loops

使用Python,但寻找一般结构。

我有一个函数,它将长度为L的数组作为输入(例如,[0,0,0,...,0]和L个半正元素)。输入数组的每个元素具有正的最大值,例如,我具有长度为L的数组,max_vals = [10,5,4,...,7]。我想迭代函数的所有可能输入。

这可以很容易地使用"广义计数",但我想知道是否有更优雅的方式来做到这一点。具体来说,我喜欢这样的结构:

meta_for vector in meta_range(max_vals):
    relevant_function( vector )

这在功能上等同于:

for i_1 in range(max_vals[0]):
    for i_2 in range(max_vals[1]):
        ...
            for i_L in range(max_vals[L-1]):
                relevant_function( [i_1, i_2, ..., i_L] )

难点在于嵌套for循环的数量取决于L,因此无法进行硬编码。

这样的事情是否存在?

1 个答案:

答案 0 :(得分:3)

您可以使用itertools.product执行此操作:

import itertools
max_vals = [3, 2]
for I in itertools.product(*[range(m) for m in max_vals]):
    print I

打印

(0, 0)
(0, 1)
(1, 0)
(1, 1)
(2, 0)
(2, 1)