嵌套列表的元组

tuple of a nested list

考虑拥有一个包含如下嵌套列表的嵌套列表:

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

我怎么能得到这个只包含元组的列表的元组?!!! 这个问题的原因是我想用它来表示我正在构建的具有某些值(不平衡)的二叉树,并且输出必须在元组中。树是逐步构建的,因为元组是不可变的,所以我不能从一开始就使用它。 输出最后必须有这样的形式:

with values:3 5 4 2 8(以 3 作为根开始):

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

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

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) returns:

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

to_tuple(btree(lst)) 会 return:

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

如果您更喜欢用 '-' 代替空元组,则可以在生成的元组为空时使用 to_tuple return '-' 来代替:

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

所以 to_tuple(btree(lst)) returns:

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