Python列表追加返回值

时间:2009-12-16 22:29:36

标签: python list

我想创建一个简单的二叉树,然后是这张图片:

http://imgur.com/QCVSW.png

基本上是空的,但是最后的值所以我创建了根列表:

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”等......)

6 个答案:

答案 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在同一行中做任何您想做的事