我想创建一个简单的二叉树,然后是这张图片:
基本上是空的,但是最后的值所以我创建了根列表:
root = [list(),list()]
并制作了一个递归函数来填充所有内容:
def TF(nodeT,nodeF , i):
if i == 35 : return 'done'
TF(nodeT.append([]),nodeT.append([]) , i = i + 1) #append T , F in the true node
TF(nodeF.append([]),nodeT.append([]) , i = i + 1) #append T , F in the false node
我的问题是简单的list.append(something)在python中返回“None”所以只要再次调用该函数(TF(None,None,1))None.append不存在。
我该如何解决这个问题?提前谢谢。
如果您对如何提高效率或以其他方式提出任何建议(从未测试过我的代码,因此我不确定它将如何做)
(我的最终目标是拥有一个真假地图和一个参数:“FTFTFFFTFTF”会显示字母“M”等......)
答案 0 :(得分:18)
在python中,您可以使用“+”运算符来连接两个列表,使原始文件保持不变。我想这就是你想要根据你的问题标题做的事情。因此
[1, 2] + [3]
将返回
[1, 2, 3]
因此您可以以“功能性方式”使用它。 万一你需要它
[1, 2].__add__([3])
相当于之前的表达式。
答案 1 :(得分:17)
要解决您的确切问题,您可以执行以下操作:
def list_append(lst, item):
lst.append(item)
return lst
然后list_append(lst, item)
会将item
追加到lst
,然后返回lst
。
答案 2 :(得分:4)
不要附加到列表中,创建它们。 Python有自定义数据结构btw:P
class BinTree(object):
def __init__(self, left=None, right=None):
self.left = left
self.right = right
def __str__(self):
return " (%s, %s) " % (self.left, self.right)
def maketree( depth ):
if depth == 0:
return BinTree( True, False )
return BinTree(
maketree( depth-1 ),
maketree( depth-1 ))
print maketree( 4 )
如果您确实需要列表,请将BinTree( x, y )
替换为[x,y]
答案 3 :(得分:3)
您可以先附加,然后传递参考:
nodeT.append([])
TF(nodeT, nodeT, i + 1)
但是你的功能对我没有意义。即使它确实有意义,它也会导致2 ** 35个函数调用TF,这需要相当长的时间才能完成。
答案 4 :(得分:1)
有一种更好的方法来创建二叉树,但我无法理解你想用它做什么。
以下是代码:
>>> def tree(i):
if i == 0:
return ['T', 'F']
return [tree(i-1), tree(i-1)]
>>> tree(3)
[[[['T', 'F'], ['T', 'F']], [['T', 'F'], ['T', 'F']]], [[['T', 'F'], ['T', 'F']], [['T', 'F'], ['T', 'F']]]]
答案 5 :(得分:0)
虽然我上面的答案是正确的,但另一种不错的方法(可能还不够漂亮)是使用append返回None的事实:
func(l.append([]) is None and l[-1])
实际上,您可以与.append
在同一行中做任何您想做的事