元组和递归列表转换

时间:2012-02-13 01:20:06

标签: python tuples sequence

递归列表由一对链表示。每对中的第一个元素是列表中的元素,而第二个元素是表示列表其余部分的对。最后一对的第二个元素是None,表示列表已结束。我们可以使用嵌套的元组文字来构造这个结构。例如:

  
    
      

(1,(2,(3,(4,None))))

    
  

到目前为止,我已经创建了一个方法,将值元组或值None转换为相应的rlist。该方法称为to_rlist(items)。例如:

>>> to_rlist((1, (0, 2), (), 3))
(1, ((0, (2, None)), (None, (3, None))))

如何编写to_rlist的反转,这是一个以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)

如何修复我的方法以正确返回嵌套元组?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:-2)

这个适用于我的硬件;)

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