2016-07-13 4 views
1

중첩 루프에 for 루프를 더 추가하는 함수를 작성할 수 있습니까? 그래서 내가 함수 for_loops(3)을 가지고 있다고 말할 수 있습니다.중첩 for 루프 계속 생성

def for_loops(n): 
     a = [] 
     for add_v in range(n): 
      a.append("AB") 

     for i in range(len(a[0])): 
      for j in range(len(a[1])): 
       for k in range(len(a[2])): 
        print(a[0][i]+" "+a[1][j]+" "+a[2][k]) 
    for_loops(3) 

다음 for_loops(4)

def for_loops(n): 
     a = [] 
     for add_v in range(n): 
      a.append("AB") 

     for i in range(len(a[0])): 
      for j in range(len(a[1])): 
       for k in range(len(a[2])): 
        for l in range(len(a[3])): 
         print(a[0][i]+" "+a[1][j]+" "+a[2][k]+" "+a[3][l]) 
    for_loops(4) 
+8

당신은 뭔가 다른 일을 보길 원하는 것일 수도의 대체 방법이 될 수 있습니다 다음과 같습니다. 재귀, 또는 그냥 미친 듯이 중첩 된 목록이없는 것. 이 방법으로 정확히 이렇게하는 좋은 방법은 없습니다. –

+2

아마도'itertools.product'를 사용할 수 있습니다. https://docs.python.org/2.7/library/itertools.html#itertools.product 하지만 Morgan Thrapp에 동의합니다. 아마이 방법이 이상적이지 않은 것 같습니다. –

답변

3

당신은

def for_loops(n): 
    from itertools import product 
    for row in product("AB", repeat = n): 
     print " ".join(row) 

은, 세트를 주어 작동하는 방식 직교 제품을 생성 itertools.product를 사용하여 유사한 결과를 얻을 수 있습니다, 그것은을 생성합니다 n 카디널리티의 데카르트 곱 즉,

(A, B) X (A, B) X (A, B) .... n 
  • n = 4 들어,이 n = 3,이 당신이 4 중첩 루프

    에서이 결과와 일치 아래와 같습니다 n = 4 실행 (A, B) X (A, B) X (A, B)

그리고 예를 들어, 것 (A, B) X (A, B) X (A, B) X (A, B)

  • >>> for_loops(4) 
    A A A A 
    A A A B 
    A A B A 
    A A B B 
    A B A A 
    A B A B 
    A B B A 
    A B B B 
    B A A A 
    B A A B 
    B A B A 
    B A B B 
    B B A A 
    B B A B 
    B B B A 
    B B B B 
    

    편집 한

    고지, 이것은 정확히 내가하고 싶은 일을하지만, 내장 된 함수를 사용하지 않고 그것을하려고합니다. -

    어떤 내장 기능을 사용하지 않으려면, 당신이

    def for_loops(n): 
        for i in range(2**n): 
         print " ".join("AB"[int(j)] for j in "{:04b}".format(i)) 
    
  • +0

    고맙습니다, 이것은 정확히 내가하고 싶은 일을하지만, 내장 함수를 사용하지 않고 그것을하려고합니다. – Pierre