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)