使用简单的递归来创建列表

时间:2014-04-06 04:20:29

标签: python list recursion linked-list

我希望将l中的每个元素(列表)添加到a中。 当我运行该功能时,它给了我' []'每次。我该如何解决这个问题?

def sim(l):
    a = []
    if len(l)>0:
        a = a.append(l.pop())
        l.pop()
        return sim(l)
    return a

4 个答案:

答案 0 :(得分:2)

有些事情是错的:

您不应该使用小写L作为变量名称 - 它看起来像一个

在函数的顶部,您为a分配一个空列表 - 最终sim将使用空列表调用,然后a将被分配一个空列表,条件语句将失败sim将返回一个空列表。

在条件语句中,您将list.append()的返回值分配给a。返回值为None,因此无论之前是a,它都会被删除。

在条件声明中你{em} 列表中的pop()两项

空列表的布尔值为false,因此无需显式检查其长度,

def sim(el, a = None):
    if el:
        a.append(el.pop())
        return sim(el, a)
    return a

我被教导要将递归函数的基本案例写成第一个语句:

def sim(el, a = None):
    if not el:
        return a
    a.append(el.pop())
    return sim(el, a)

答案 1 :(得分:1)

append()不会返回任何内容,但会更新现有列表。换句话说,通过尝试分配append()方法的结果,您在添加项目后将a设置为空。

答案 2 :(得分:0)

这是一项家庭作业,你需要以某种(过于复杂的方式)做这项工作吗?因为如果没有,你可以在Python中将一个列表添加到另一个列表中,如下所示:

>>> l = [1, 2, 3]
>>> a = []
>>> a.extend(l)
>>> a
[1, 2, 3]

答案 3 :(得分:0)

您的密码:def sim(l): a = []

每次调用return sim(l)并且sim(l)为空时,递归调用函数a=[]

试试这个:

        def sim(l,a):
            if len(l)>0:
                 a.append(l.pop())
                 print a
                 return sim(l,a)
        return a

enter image description here