元组与递归列表转换
递归列表是通过一系列成对的元素来表示的。每对中的第一个元素是列表中的一个元素,而第二个元素则是一个对,表示列表的其余部分。最后一对的第二个元素是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)