递归列表由一对链表示。每对中的第一个元素是列表中的元素,而第二个元素是表示列表其余部分的对。最后一对的第二个元素是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)
如何修复我的方法以正确返回嵌套元组?
答案 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