考虑有一个包含嵌套列表的嵌套列表,如下所示:
list = [[], 3, [[2], [4], [5], [[],[3,[5,8]]]]]
如何获取仅包含元组的此列表中的元组? 这个问题的原因是我想用它来表示我正在使用一些值(不平衡)构建的二叉树,并且输出必须位于元组中。该树是逐步构建的,并且由于元组是不可变的,因此我不能从一开始就使用它。 最终输出必须具有这样的形式:
,值:3 5 4 2 8(以3作为根):
((-,2,-),3,((-,4,-),5,(-,8,-)))
答案 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, '-')))