2011-03-16 2 views
0

주어진 공식의 모든 가능성을 계산하기 위해 반복을하고 싶습니다. 중첩 된 반복을 써야하지만 올바르게 만들 수는 없습니다. I는 (0- % 내지 100 %) 3 상수 모든 가능성을 계산하는 알고리즘 :(n 값 반복

에 좋지이다 {Z2, Z1을, Z3} 값은 I 조제 :

a=frange(0,1.0,0.01) 
for z1 in a: 
    for z2 in a: 
    for z3 in a: 
     calculate(z1,z2,z3) 

및 I로 제대로 작동 예상.

Z는 내가 중첩 된 반복을 만들 수있는 방법이를 처리하기 위해 나에게 제안 할 알고리즘 n 개의 값으로 구성 (N 내 경우에는 2-30 가능) 목록?

+1

이렇게하십시오. 아니면이게 속임수입니까? –

+0

@ 이그나시오 : 우리가 볼 때 우리는 모두 "도"와 같을 것입니다. –

+0

실제로 제대로 작동하면 무엇이 더 필요합니까? – tiagoboldt

답변

6

인 경우 가장 쉬운 방법은 itertools.product() :

을 사용하는 것입니다. n 정말 30 될 경우
a=frange(0,1.0,0.01) 
for z in itertools.product(a, repeat=n): 
    calculate(*z) 

,이 이상 100**30 = 10**60 값을 반복 할 것이다. 기다릴 준비를하십시오.

+0

나는 그런 모듈이 있다는 것을 몰랐다. :) 고마워, 파이썬은 훌륭하다. – Fish

+0

Sven, * 앞에 z를 붙이는 의미는? (? z)? 계산은별로 중요하지 않습니다. 감사합니다. – Fish

+0

@ 물고기 : 'n'이 '3'이라는 것을 알고 있다면, itertools.product (...)에'z1, z2, z3 '을 쓸 수 있습니다. 미리 'n'을 알지 못하기 때문에 시퀀스 언 패킹을 사용할 수 없으며 'z'는 모든 매개 변수의 튜플입니다. 'calculate()'는'n' 매개 변수를 사용하고'calculate()'를 호출하면 튜플을 언팩한다고 가정합니다. –

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) 

또는

,137,191을 말할 수있다
+0

(Sven M.은 내가 나의 글을 쓰는 동안 그의 대답을 올렸다. itertools.product'에 대한'반복'kwarg에 대해 알고 있었기 때문에 그의 대답이 더 좋았다. 나는 그것을 삭제하지 않고 여기를 떠난다. 더 자세한 정보는 누구에게나 유용합니다.) –