嵌套列表的元组

时间:2019-01-17 23:34:42

标签: python tuples binary-tree

考虑有一个包含嵌套列表的嵌套列表,如下所示:

list = [[], 3, [[2], [4], [5], [[],[3,[5,8]]]]]

如何获取仅包含元组的此列表中的元组? 这个问题的原因是我想用它来表示我正在使用一些值(不平衡)构建的二叉树,并且输出必须位于元组中。该树是逐步构建的,并且由于元组是不可变的,因此我不能从一开始就使用它。 最终输出必须具有这样的形式:

,值:3 5 4 2 8(以3作为根):

((-,2,-),3,((-,4,-),5,(-,8,-)))

1 个答案:

答案 0 :(得分:0)

如果列表是列表的实例,则可以遍历列表并将其递归地转换为元组:

def to_tuple(lst):
    return tuple(to_tuple(item) if isinstance(item, list) else item for item in lst)

以便给定列表以您的问题建议的格式转换为二叉树:

def btree(lst):
    tree = []
    for item in lst:
        node = tree
        while node:
            left, value, right = node
            node = right if value < item else left
        node[:] = [], item, []
    return tree

lst = [3, 5, 4, 2, 8]

其中btree(lst)返回:

[[[], 2, []], 3, [[[], 4, []], 5, [[], 8, []]]]

to_tuple(btree(lst))将返回:

(((), 2, ()), 3, (((), 4, ()), 5, ((), 8, ())))

如果您希望用'-'代替空元组,则可以使to_tuple返回'-',而不是在生成的元组为空时:

def to_tuple(lst):
    return tuple(to_tuple(item) if isinstance(item, list) else item for item in lst) or '-'

使to_tuple(btree(lst))返回:

(('-', 2, '-'), 3, (('-', 4, '-'), 5, ('-', 8, '-')))