Итерация по n значениям - PullRequest
       0

Итерация по n значениям

0 голосов
/ 16 марта 2011

Я хотел бы сделать итерацию, чтобы вычислить все возможности данной формулы.Мне нужно записать вложенную итерацию, но я не могу сделать это правильно.Я плохо разбираюсь в алгоритме: (

Для вычисления всех возможностей (% 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 ]

6 голосов
/ 16 марта 2011

Самый простой способ - использовать 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. Будьте готовы ждать.

0 голосов
/ 16 марта 2011

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...