2014-07-17 8 views
1

나는 기본적인 기본 무언가를 놓치고있는 것 같아요.이 문제를 잘못보고 있으면 누군가 올바른 방향으로 나를 가리킬 수 있다면 행복 할거야. 여기에 내 문제가있다 :중첩 된 for 루프를 동적으로 생성 하시겠습니까?

나는 변수 목록을 가지고 있으며, 간단히하기 위해 항상 값을 포함하고있다. 내 코드를 가능한 모든 옵션을 통해 사용하고 싶습니다. 여기에 내가 빨리 할 생각 방법 :

num_apples = 100 
num_pears = 100 

for current_apple in range(0,num_apples+1): 
    for current_pear in range(0, num_pears+1): 
     print current_apple, " - ", current_pear 

이 코드에 대해 좋은 점은 내가 쉽게 루프에서 깰 수있다 (즉, 내가 current_apple + current_pear> 50 일을하지 않으려는 말)하지만, 가장 큰 단점은 내가 처음부터 시작해서 자주 알지 못할 변수 (이 경우 과일)가 얼마나 많은지 구체적으로 알 필요가있다.

위의 for 루프 유형 구조를 동적으로 생성 할 수있는 방법이있어 하위 루프를 중단 할 때 제어 할 수는 있지만 사전에 얼마나 많은 변수가 있는지 구체적으로 알지 못합니다.

EDIT : 변수가 한 번에 하나씩 커질 수 있다면 이상적으로 생각합니다. 일단 변수가 범위를 벗어나면 루프에서 빠져 나올 수 있습니다.

+3

당신은 재귀를 사용할 수 있습니까? –

+0

재귀는 대답입니다 – nagyben

+0

@ColonelThirtyTwo 미안하지만 잠시 후 재귀를 살펴 보겠습니다. 감사! – Lostsoul

답변

4

itertools.product은 중첩 된 for 루프와 같습니다.

https://docs.python.org/2/library/itertools.html#itertools.product

>>> import itertools 
>>> counts = [1, 2, 3] 
>>> ranges = [range(x) for x in counts] 
>>> for i in itertools.product(*ranges): 
...  print i 
... 
(0, 0, 0) 
(0, 0, 1) 
(0, 0, 2) 
(0, 1, 0) 
(0, 1, 1) 
(0, 1, 2) 
>>> 
+0

itertools 솔루션에 대해서도 생각하고 있었지만 사전에 카운트를 모르는 경우에는 작동하지 않습니다 ... OP의 문제라고 생각 합니다만 명확하지 않습니다. –

+0

@TimPietzcker 더 이상 필요하지 않으면 루프에서 빠져 나와 생성기에서 요소를 검색하는 것을 중지 할 수 있습니다. –

+0

나는 그것을 실행하려했지만 어떻게 아이템이 성장하지 못하게하는지 확신 할 수 없다. 예를 들어 10 개의 항목이 있고 각 항목의 범위가 10이라고 가정합니다. 4 번째 항목이 4가되면 해당 항목의 성장을 멈추지 만 다른 숫자가 계속 증가하도록하려면 어떻게해야합니까? – Lostsoul

관련 문제