2012-02-13 4 views
5

재귀 목록은 쌍 체인으로 표시됩니다. 각 쌍의 첫 번째 요소는 목록의 요소이고 두 번째 요소는 나머지 목록을 나타내는 쌍입니다. 마지막 쌍의 두 x 째 요소는 없음으로, 목록이 종료되었음을 나타냄니다. 중첩 된 튜플 리터럴을 사용하여이 구조체를 생성 할 수 있습니다. 예 : 변환튜플 및 재귀 목록 변환

(1, (2, (3, (4, 없음))))

지금까지 내가 만든 방법 값의 튜플 또는 None 값을 해당 rlist에 추가합니다. 이 메소드는 to_rlist (items)로 불린다. 예 :

rlist를 입력으로 받아 해당 튜플을 반환하는 함수 인 to_rlist의 역함수를 쓰려면 어떻게해야합니까? 메서드는 to_tuple (매개 변수)로 호출되어야합니다. 수행 할 작업의 예 :

>>> x = to_rlist((1, (0, 2),(), 3)) 
>>> to_tuple(x) 
(1, (0, 2),(), 3) 

참고 : to_rlist 메소드는 의도 한대로 작동합니다.

>>> x = to_rlist((1, (0, 2),(), 3)) 
>>> to_tuple(x) 
(1, 0, 2,(), 3) 

가 어떻게 제대로 중첩 된 튜플을 반환하는 내 방법을 수정할 수 있습니다

def to_tuple(L): 
    if not could_be_rlist(L):   
     return (L,) 
    x, y = L 
    if not x is None and not type(x) is tuple and y is None:   
     return (x,)  
    elif x is None and not y is None:   
     return ((),) + to_tuple(y) 
    elif not x is None and not y is None:   
     return to_tuple(x) + to_tuple(y) 

나에게 (잘못) 다음과 같은 결과를 얻을 어떤 :

내가 지금까지 무엇을 가지고 ?

이 하나가 내 HW 근무
+1

재귀 목록 자체에 대한 참조를 포함하는 하나입니다. – wim

+2

@wim "자체적으로 정의 된 목록 유형"을 의미 할 수도 있습니다.이 경우에는 적합 할 것입니다. (아마도 할당에서 사용하는 용어 일 수도 있고, 머무를 수있는 또 다른 이유이기도합니다.) – millimoose

+5

@ user1140118 : 스택 오버플로는 "나를위한 숙제"사이트가 아닙니다. 당신은 스스로 기능을 시작해야하고, 당신이 가진 * 구체적인 * 문제에 대한 질문을 게시해야합니다. – millimoose

답변

4
def to_list(x): 
    if x == None: 
     return() 
    if type(x) != tuple: 
     return x 
    a, b = x 
    return (to_list(a),) + to_list(b) 
+3

1. 싱글 톤과의 비교를 위해'x is None'을 사용합니다. 2. 타입 검사를 위해 isinstance를 사용합니다. 그래서 코드는 상속 된 클래스와 함께 작동합니다. 3. 숙제 태그를 볼 때, . 학생이 자신의 업무에서 개선이 필요한 영역을 찾아내는 데 도움을줍니다. – wim

+0

나는 해결책을 시도했지만, 튜플 ("str"이 아닌) 만 연결하여 잘못된 것을 튜플 할 수 있습니까? – Dejell

-1

)

def to_rlist(items): 
    r = empty_rlist 
    for i in items[::-1]: 
     if is_tuple(i): r1 = to_rlist(i) 
     else: r1 = i 
     r = make_rlist(r1,r) 
    return r 
+5

empty_rlist 란 무엇이고 make_rlist는 무엇입니까? – Dejell