嵌套列表的元组

问题描述 投票:0回答:1

考虑使用包含嵌套列表的嵌套列表,如下所示:

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

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

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

((-,2,-),3,((-,4,-),5,(-,8,-)))
python tuples binary-tree
1个回答
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, '-')))
© www.soinside.com 2019 - 2024. All rights reserved.