2013-11-26 2 views
-3

변경 후 평생을 되돌리기 위해 내 코드를 어떻게 바꿀 수 있습니까?재귀 및 공장 문제

나는 목록이 있습니다

LLL = [12,[3,[5],[6,[[7, [],8], []]]], [8, [0,87,23,434,444,33]]] 

을하고 나는이 함수를 호출 :이 기능은 변경 후 목록을 반환해야

def testQ1(): 
dolist_deep_add1 = factory_dolist_deep_A((lambda x: x + 1)) 
print ('dolist_deep_add1(LLL) : ', dolist_deep_add1(LLL)) 

합니다. 결과 임에 대한 기다림 :

LLL = [13,[4,[6],[7,[[8, [],9], []]]], [9, [1,88,24,435,445,34]]] 

factory_dolist_deep_A 코드 :

def factory_dolist_wide_A(fa): 
def print_wide (L): 

    def pw1(x): 
     if type(x) is int: 
     x = fa(x) 
     print(str(x)+' ', end='') 

    def pwstart (L, lvl): 
     print('\nlevel ' + str(lvl) + " : " , end='') 
     pw  (L, lvl) 

    def pw (L, lvl): 
     if not L: return 
     Q = [] 
     for a in L: 
      if type(a) is list: 
       if a == [] : pw1('[]') 
       else: Q.extend(a) 
      else: 
       pw1(a) 
     pwstart(Q , lvl + 1) 

    return pwstart(L, 0) 
return print_wide 

을 지금은 그냥 숫자를 취득하여 인쇄 목록 자체를 변경하지 않고.

변경된 목록을 반환하도록 factory_dolist_wide_A(fa)을 변경하고 싶습니다.

이 인쇄 기능과 동일한 방식으로 작동하며 변경 내용을 인쇄 할뿐만 아니라 목록 자체를 변경해야합니다.

+1

귀하의 질문은 명확하지 않습니다. "변경 후 L을 돌려 주겠다"는 것은 무엇을 의미합니까? – mgilson

+0

나는 단지 여기에 그 내용이 인쇄된다는 것을 의미하며 변경 사항을 인쇄하지 않고 변경 사항 목록을 반환하고 싶습니다 ... –

+0

그가 원하는 것이 무엇인지 분명합니다. 함수는 현재 전달 된 함수를 사용하여 변경된 목록을 인쇄합니다.이 함수는 변경된 목록도 반환하기를 원합니다. –

답변

0

코드에 불필요한 함수 정의가 많이 있습니다. print_wide(L)pwstart(L, 0)으로 정의되고, pwstart(L, lvl)pw(L,lvl)으로 정의된다.

모든 정의가 print_wide으로 무너졌습니다. pw1()modify()으로 변경했습니다.

또한 기존 코드에 심각한 오류가 있습니다. Q.extend(a)은 전혀 의미가 없으므로 제거했습니다.

따라서 다음 코드는에 대해 묻는 결과를 이 생성하지만 원래 코드가 인쇄 한 것은 인쇄하지 않습니다.

def factory_dolist_wide_A(fa): 
    def print_wide (L, lvl=0): 
     def modify(x): 
      if type(x) is int: 
       x = fa(x) 
       print(str(x) + ' ', end='') 
      else: 
       print('[] ', end='') 
      return x 

     print('\nlevel ' + str(lvl) + " : " , end='') 

     newList = [] 
     for a in L: 
      if type(a) is list: 
       newList.append(print_wide(a, lvl+1)) 
      else: 
       newList.append(modify(a)) 
     return newList 
    return print_wide 

LLL = [12,[3,[5],[6,[[7, [],8], []]]], [8, [0,87,23,434,444,33]]] 

def testQ1(): 
    dolist_deep_add1 = factory_dolist_wide_A((lambda x: x + 1)) 
    x = dolist_deep_add1(LLL) 
    print() 
    print('dolist_deep_add1(LLL) : ', x) 

testQ1() 
+0

당신의 씀씀이 답변에 감사드립니다!, 많이 도와 줬지만 여전히 새로운 목록을 만들지는 않았지만 주어진 목록을 변경하라는 요청을 받았습니다. . –

+0

'a = [1,2,3]'와 같은 간단한 배열로 어떻게하면 좋을까요? –

+0

'a = [1,2,3]'와 같은 목록을 어떻게 바꿀 수 있는지 이해할 수 없다면 먼저 파이썬의 기초를 배워야합니다. 기본적인 Python3 튜토리얼을 읽고 ** 이해할 때까지 ** 예제를 시도 할 수있다. 또한 파이썬리스트를 변경하는 사람들의 예제를 검색 할 수 있습니다. –