元组与递归列表转换

5 投票
2 回答
8012 浏览
提问于 2025-04-17 12:55

递归列表是通过一系列成对的元素来表示的。每对中的第一个元素是列表中的一个元素,而第二个元素则是一个对,表示列表的其余部分。最后一对的第二个元素是None,这表示列表已经结束。我们可以用嵌套的元组来构建这种结构。举个例子:

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

到目前为止,我已经创建了一个方法,可以把一组值的元组或值None转换成相应的递归列表。这个方法叫做to_rlist(items)。举个例子:

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

现在我想写一个与to_rlist相反的方法,这个方法接受一个递归列表作为输入,并返回相应的元组。这个方法应该叫做to_tuple(parameter)。以下是应该发生的情况的例子:

>>> 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 个回答

-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

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这就像是把水从一个杯子倒到另一个杯子一样。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们想要的数据没有找到。这就像是你想喝水,但杯子里没有水,或者水的颜色不对。

为了避免这些问题,我们可以提前检查一下数据,确保它是我们想要的样子。这样一来,当我们真正需要使用这些数据的时候,就不会出错了。

总之,处理数据就像是做一个简单的搬家工作,确保每样东西都在正确的位置,这样才能顺利进行。

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

撰写回答