2012-02-13 12 views
5

再帰リストは、一連のペアで表されます。各ペアの最初の要素はリスト内の要素で、2番目の要素はリストの残りの部分を表すペアです。最後のペアの2番目の要素はNoneで、リストが終了したことを示します。ネストされたタプルリテラルを使ってこの構造体を構築することができます。例:タプルおよび再帰リスト変換

(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メソッドは意図したとおりに動作します。

これは私がこれまで持っているものです。

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) 

(間違っていた)私に次のような結果を与える:私は適切にネストされたタプルを返すように私の方法を修正することができますどのように

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

+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. 'homework'タグを見たら、 。生徒が自分の仕事でどの分野の改善が必要かを理解するのに役立ちます。 – wim

+0

私は解決策を試しましたが、何が問題なのかをタプル化するためにタプル( "str"ではなく)のみを連結できますか? – Dejell

-1

この1つは私のHWのために働いていた;)

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

関連する問題