嵌套列表的元组
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, '-')))
以上是关于嵌套列表的元组的主要内容,如果未能解决你的问题,请参考以下文章