for 循环的下一层抽象?
Next level of abstraction up from a for loop?
在 Python 工作,但正在寻找通用结构。
我有一个函数将长度为 L 的数组作为输入(例如,[0,0,0,...,0] 具有 L 个半正元素)。输入数组的每个元素都有一个正的最大值,例如,我有一个长度为 L 的数组,max_vals = [10,5,4,...,7]。我想遍历函数的所有可能输入。
这可以使用 "generalized counting" 轻松完成,但我想知道是否有更优雅的方法来完成此操作。具体来说,我想要这样的结构:
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,所以不能硬编码。
有这样的东西吗?
您可以使用 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)
在 Python 工作,但正在寻找通用结构。
我有一个函数将长度为 L 的数组作为输入(例如,[0,0,0,...,0] 具有 L 个半正元素)。输入数组的每个元素都有一个正的最大值,例如,我有一个长度为 L 的数组,max_vals = [10,5,4,...,7]。我想遍历函数的所有可能输入。
这可以使用 "generalized counting" 轻松完成,但我想知道是否有更优雅的方法来完成此操作。具体来说,我想要这样的结构:
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,所以不能硬编码。
有这样的东西吗?
您可以使用 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)