我想创建一个简单的二进制树后面这一形象:
基本清空,但最后的值,所以我创建的根目录:
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
我的问题是在Python回报“无”简单list.append(东西),以便尽快功能再次调用(TF(无,无,1))None.append犯规存在。
我该如何解决这个问题?提前致谢。
此外,如果您有关于如何使这个更有效或以另一种方式的任何建议(从来没有来测试我的代码,所以我不知道它会怎么办)
(我的最终目标是拥有一个真正的假地图和参数,因此:“FTFTFFFTFTF”带来了字母“M”等)
在Python中,你可以使用“+”操作符来连接两个列表离开原件不变。我想这就是你要根据你的问题的标题做什么。从而
[1, 2] + [3]
将返回
[1, 2, 3]
所以你可以用它更多的是“功能性的时尚”。万一你需要它
[1, 2].__add__([3])
是等同于之前的表达。
为了解决您的具体问题,你可以这样做:
def list_append(lst, item):
lst.append(item)
return lst
然后list_append(lst, item)
将追加item
到lst
,然后返回lst
。
不添加到列表中,创建它们。 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]
您可以附加,然后再通过参考:
nodeT.append([])
TF(nodeT, nodeT, i + 1)
但是,你的功能是没有意义的我。即使它没有任何意义,这将导致2 ** 35函数调用TF,这将需要比较长的时间才能完成。
有一个更好的方式来创建一个二叉树,但我不明白你想用它做什么。
下面是代码:
>>> 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']]]]
添加到@csierra的答案 - 我upvoted作为最直接的回答OP:在
+ [a,b]
(与周围的加数单个托架)是像list.extend([a,b])
[ 1, 2, 3,4] + [5,6]
出[6]:[1,2,3,4,5,6]
而
+ [[a,b]]
(具有双括号)是像list.append([a,b])
In [5]: [ 1, 2, 3,4] + [[5,6]]
Out[5]: [1, 2, 3, 4, [5, 6]]
好吧,虽然我上面的答案是正确的,另外一个不错的(但也许不漂亮)的方式来做到这一点会使用附加的回报无事实:
func(l.append([]) is None and l[-1])
这实际上让你做任何你在.append
同一行想要的