我想进行迭代来计算给定公式的所有可能性。我需要写下嵌套迭代,但无法做到正确。我不擅长算法:(
为了计算所有可能性(%0-%100)3个常数{z1,z2,z3}值,我准备了:
a=frange(0,1.0,0.01)
for z1 in a:
for z2 in a:
for z3 in a:
calculate(z1,z2,z3)
并按照我的预期正常工作。
如果z是一个由n个值组成的列表(在我的情况下n可以是2-30),你建议我使用哪种算法来处理这个问题?如何创建嵌套迭代?
答案 0 :(得分:6)
最简单的方法是使用itertools.product()
:
a=frange(0,1.0,0.01)
for z in itertools.product(a, repeat=n):
calculate(*z)
如果n
确实是30
,则会迭代100**30 = 10**60
个值。准备等待。
答案 1 :(得分:0)
itertools.product
会做你想要的(以及更多)。不幸的是,它希望列表的产品在不同的参数中进行计算,如下所示:
>>> list(itertools.product([1,2,3],[1,2,3]))
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
所以从表面上看,你需要做这样的事情:
a=frange(0,1.0,0.01)
for (z1,z2,z3) in itertools.product(a,a,a): calculate(z1,z2,z3)
但如果您想使用不同数量产品的确切代码,您可以说
a=frange(0,1.0,0.01)
for (z1,z2,z3) in itertools.product(*(3*[a])): calculate(z1,z2,z3)
或
a=frange(0,1.0,0.01)
for (z1,z2,z3) in apply(itertools.product, 3*[a]): calculate(z1,z2,z3)