迭代n个值

时间:2011-03-16 11:32:28

标签: python algorithm

我想进行迭代来计算给定公式的所有可能性。我需要写下嵌套迭代,但无法做到正确。我不擅长算法:(

为了计算所有可能性(%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),你建议我使用哪种算法来处理这个问题?如何创建嵌套迭代?

2 个答案:

答案 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)