嵌套列表的元组
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, '-')))
考虑拥有一个包含如下嵌套列表的嵌套列表:
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, '-')))