嵌套列表的元组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套列表的元组相关的知识,希望对你有一定的参考价值。

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

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

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

值: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)返回的地方:

[[[], 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, '-')))

以上是关于嵌套列表的元组的主要内容,如果未能解决你的问题,请参考以下文章

如何取消嵌套混合类型的元组? [复制]

Python 函数正在创建一个额外的元组

从元组的元组中创建一个列表

Python字典,作为不增加值的元组键

Python之元组

如何将列表(元组内)中的元组转换为列表?