Python 列表 append 的返回值

10 投票
7 回答
50358 浏览
提问于 2025-04-15 17:06

我想创建一个简单的二叉树,样子像这个图片:

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

我的问题很简单,Python中的list.append(something)会返回“None”,所以每当这个函数再次被调用时(比如TF(None, None, 1)),None.append就不存在了。

我该怎么解决这个问题呢?提前谢谢你。

另外,如果你有任何建议,能让我这个代码更高效或者用其他方式实现(我还没测试过我的代码,所以不确定效果如何)

(我最终的目标是得到一个真假的映射和一个参数,比如:“FTFTFFFTFTF”会对应字母“M”等等……)

7 个回答

4

别往列表里添加东西,直接创建新的列表。顺便说一下,Python有自己特别的数据结构哦 :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]

20

要解决你提的这个问题,你可以这样做:

def list_append(lst, item):
  lst.append(item)
  return lst

然后使用 list_append(lst, item) 这个命令,它会把 item 加到 lst 这个列表里,并且最后会把更新后的 lst 返回给你。

30

在Python中,你可以用“+”这个符号把两个列表连接在一起,而不会改变原来的列表。我想这正是你问题标题中想要做的事情。因此,

[1, 2] + [3] 

会返回

[1, 2, 3]

这样你就可以更“函数化”地使用它。如果你需要的话,

[1, 2].__add__([3])

和之前的表达式是等价的。

撰写回答